Tim
А чего надо написать ?
アレクサンダー・バキマトフ
isModalOpen:boolean ?
тебе прежде чем типы писать, надо код пофиксить
アレクサンダー・バキマトフ
А чего надо написать ?
покажи свой стор пожалуйста
Пöß d'Ivoire
Tim
Без типов всер норм
Tim
export const showInfoModal = createAction(SHOW_INFO_MODAL) reducer.on(showInfoModal, (state) => ({ ...state, isModalOpen: !state.isModalOpen }))
アレクサンダー・バキマトフ
Без типов всер норм
тогда если без типов все норм const {isModalOpen}: IState =useSelector((state): IState=>state.modal)
Tim
Должно быть норм )))
Тимофей 🛴
アレクサンダー・バキマトフ
Неправильно же, аа нет, не туда посмотрел
вай? у него в сторе по ключу modal лежит {isModalOpen:boolean}
アレクサンダー・バキマトフ
я запутался
アレクサンダー・バキマトフ
Не работает ))
ошибку в студию
Tim
Object is of type 'unknown'
アレクサンダー・バキマトフ
@tanyaisinmybed он может чо та где то выше переопределить? я прост в тсе не так силен
Bogdan
Js знает, а тс не знает ))
кек, ну откуда тсу узнать, укажи в типе, тогда он будет ожидать
Tim
Где указывать то ?
Bogdan
Где указывать то ?
я же выше показал
Bogdan
type IState = { modal: any isModalOpen: any } const {isModalOpen}: IState =useSelector((state): IState=>state.modal)
Тимофей 🛴
@tanyaisinmybed он может чо та где то выше переопределить? я прост в тсе не так силен
Не буду гадать без кода на сандбоксе. Примитивный кейс, нужно просто правильно написать тип RootState, что у него там не работает хз
Bogdan
type IState = { modal: any isModalOpen: any } const {isModalOpen}: IState =useSelector((state): IState=>state.modal)
и вот теперь тс видит твой modal, если его нету , он пошлет тебя
Bogdan
Object is of type 'unknown'
ну значит у тебя в state пришла пачка говна, став дебагер, консоль логай, смотри что там
Пöß d'Ivoire
useSelector((state: IState) => state.modal) тут ведь опечатка была
Bogdan
Нет, это тип state вывелся как unknown
а , так он вообще хрень сделал, useSelector это же ридаксовый
Tim
Object modal: isModalOpen: false // const zz=useSelector(state=>state) console.log(zz) воводит нормальный объект
Anonymous
Привет. В компоненте есть перемнная loading, она есть, пока данные грузятся с апи. Как по ней внутри таблицы, под thead, отображать спиннер? Внутрь <tr> не положить, нельзя.
Bogdan
Bogdan
const state = useSelector<RootReducer, Selected>( state => ({}), shallowEqual );
где RootReducer - описанный стор (весь, может и не весь, не помню) Selected - описанный стор, точнее не весь стор, а нужная часть
Anonymous
Кто-нибудь сталкивался с подобным? Как лучше всего добавить пустой th?
Anonymous
<tbody>
Так можно? Сам спиннер это <div>. Я думал, <div> нельзя в <tbody>.
Anonymous
<tbody>
<div> cannot appear as a child of <tbody>.
Anonymous
декларирован вот так <tr/> ?
<tr><th>123</th></tr> Это мне нужно для подобного, у аватарки не должен быть заголовок(скрин)
Tim
точенее Selected, та часть стора, на которую подписался
В рут редюсере тоже нужно типы описывать ?
Bogdan
В рут редюсере тоже нужно типы описывать ?
type RootReducer = { firstReducer: FirstState; secondReducer: SecondState; }; да , там весь стор, не помню, может не весь, нужно смотреть а в Selected type Selected = { modal: any showModal: any }; то, на что подписываешься в useSelector
Пöß d'Ivoire
<div> cannot appear as a child of <tbody>.
так попробуй тогда в tbody по условию либо выводить 1 tr со спинером внутри, либо все прочие tr с данными
Bogdan
короче тупо передай 2 дженерика в хук, useSelector<any, any> сделай для пробы
Anonymous
Насколько помню мои опыты, <div нельзя в <tr>.
можно UPD: а нет, скорее будет ошибка валиться, лучше в td
Anonymous
точнее
Bogdan
тогда если без типов все норм const {isModalOpen}: IState =useSelector((state): IState=>state.modal)
не, у useSelector есть два дженерика, туда передать все нужно, дальше он по ним все словит
Tim
короче тупо передай 2 дженерика в хук, useSelector<any, any> сделай для пробы
Спасибо, все получилось const {isModalOpen}=useSelector<RootState,IState>((state)=>state.modal) IState взял из редюсера модалки, а рутстате из рутРедюсера. Так правильно делать или не совсем ?
Anonymous
можно UPD: а нет, скорее будет ошибка валиться, лучше в td
{loading && <tr><td><Loader /></td></tr>} не пишет ошибок, вроде.
Anonymous
можно, но валидацию не пройдет
да-да, я про это и говорю
Tim
import {IState as Selected} from '../ducks/modal' так легально делать?
Anonymous
{loading && <tr><td><Loader /></td></tr>} не пишет ошибок, вроде.
такой синтаксис валидный, а вот если div в tr(но не в td) - уже нет
Tim
Может, зря вообще за этот дурацкий тс взялся )
Тимофей 🛴
import {IState as Selected} from '../ducks/modal' так легально делать?
Легально, но можешь не переименовывать, а сразу назвать нормально
Тимофей 🛴
Может, зря вообще за этот дурацкий тс взялся )
Не зря, Иди в @ts_ru, но лучше сначала в доку с гуглом
Tim
У меня дока с читшитом открыта
Tim
Значит, я в неправильном месте задавал вопросы ) На каждый пук - свой чатик|||
Stanislav
Всем привет! Есть Router с атрибутом history в компоненте App файла app.jsx со своими Route элементами. В него импортируются наследованные компоненты, например home.jsx. Нужно ли Router указывать в наследуемых компонентах, если там будут свои элементы Route?
i
у компоннета LInk пакета роута можно как-то отрубить переход по ссылке?
i
ну типа onlcik навеситть и e.preventDefault
Yury
у компоннета LInk пакета роута можно как-то отрубить переход по ссылке?
Не используй Link , если по нему не нужно переходить ..
i
ну тут такое дело, менюха, родитоельские ссылки могут иметь ссылку. а могут не иметь
Archakov
ну типа onlcik навеситть и e.preventDefault
создай свой компонент, который будет твою логику выполнять
i
но тут нарно лучше всё дивами сделать и юзать редирект, но как сделать редирект? компонент редирект ведь если в переменую просто забить в ф-ции, он же не исполнится
i
так рердрект как мжоно сделать в ф-ции?
Sergei
Всем привет, кто подскажет как протестить обёртку ajax запроса, например на вызов нужных колбеков. Из инструментов sinon
Archakov
ну тут такое дело, менюха, родитоельские ссылки могут иметь ссылку. а могут не иметь
я бы на твоем месте сделал бы не вложенность, а один блок, в котором родительская категория не поглощает дочерние. родительская отдельной ссылкой, а рядом блок с другими дочерними ссылками
Archakov
ну, или написать кастомный компонент, который отлавливает клик и проверяет, на что именно ты кликнул и делает переход
i
нашёл решение https://tylermcginnis.com/react-router-programmatically-navigate/