Artem
Ну тогда 4 вариант
То есть мне такие костыли надо городить? this.setState({ datasets: { ...this.state.datasets, count: { ...this.state.datasets.count, k: 2 } } })?
Artem
Ебт
🦜
То есть мне такие костыли надо городить? this.setState({ datasets: { ...this.state.datasets, count: { ...this.state.datasets.count, k: 2 } } })?
скопируй объект. Смутируй как выше предложили и потом вызови setState
🦜
Плохой вариант
ну ему надо хоть как-то
Daniil
Плохой вариант
уж лучше плодить полотно спредов, да)
Maksim
норм вариант на самом деле ничего такого страшного не произойдет если мутировать
Тимофей 🛴
уж лучше плодить полотно спредов, да)
если ниже по дереву компонент который следит за вложенной частью стейта, то работать не будет
Maksim
так что при определенных условиях ничто не мешает мутировать
Daniil
твой поинт в том, что старое значение будет эквивалентно новому?
Artem
скопируй объект. Смутируй как выше предложили и потом вызови setState
Мне нужно именно копировать его через Object.assign? Нельзя ли что-то подобное: this.state.datasets.count.k = 5; this.setState(this.state) Хотя чувтсвую, что все же только через assing действовать
Artem
Благодарю
Maksim
https://codesandbox.io/s/dazzling-ride-x4p7m но как бэ все работает )
Artem
нельзя. C вложенностью да, через Object.assign.
Что-то мне подсказывает, что он работает только с одним уровнем вложенности
🦜
https://codesandbox.io/s/dazzling-ride-x4p7m но как бэ все работает )
работать то будет, но мутирование стейта реакта вызывает странные поведения
Maksim
какие?
🦜
Что-то мне подсказывает, что он работает только с одним уровнем вложенности
ну можно хак сделать. JSON.stringify, меняешь что нужно, потом JSON.parse
🦜
какие?
потому что при мутировании у тебя ссылка остается на тот же объект и при сравнении его ничего происходить не будет
Maksim
потому что при мутировании у тебя ссылка остается на тот же объект и при сравнении его ничего происходить не будет
если прокидывать в чилды и если чилды pure или memo, в остальных случаях все будет работать
Daniil
если прокидывать в чилды и если чилды pure или memo, в остальных случаях все будет работать
Мутации стейта порой сложно дебажить, особенно если код не твой)
Maksim
я не агитирую за мутации, я просто говорю, что там нет никакой магии
Valentin
Дароу, есть роутинг на react-router. Как реализовать редирект внутри него, при структуре: <Switch> <Route path="/" /> <Route path="/oper" /> <Route path="/ne-oper" /> </Switch> Возможно path принимать массив? - да можно, но тогда в навигации я не смогу удобно подсветить нужный пункт меню, возможно сразу редиректить корень на /oper?
Artem
Такая вложенность отстой. 1. Нормализуй и отрефакторь. 2. Возьми immer 3. Возьми immutability helpers 4. {...state, nested: {...state.nested, prop: 2}} (в зависимости от глубины)
А что, если вложенность нормализовать нельзя и нужно использовать несколько уровней вложенности, например при работе с графиками в chart.js?
Andrii
а как выглядит редирект?
Redirect - это компонент, который ты импортишь из роутера.
Andrii
а как выглядит редирект?
https://reacttraining.com/react-router/web/api/Redirect
Valentin
Redirect - это компонент, который ты импортишь из роутера.
а не получится дико, это же: <Switch> <Route path="/"> <Redirect ="/oper" /> </Route> <Route path="/oper" /> </Switch>
Anonymous
Кто-нибудь в курсе в react-datepicker после локализации на Ru выбирается время криво, нажимаю к примеру на 10:15 а выбирается 10:10
Maxim
redux лучше юзать как раньше с connect, или с хуками (useDispatch, useSelector, etc)?
Artem
Нормальная ли практика слушать socket.on в самих компонентах? Или можно сделать лучше?
Roman
здравствуйте, зачем нужен redux-thunk? зачем вообще диспатчить функции?
🦜
Не раскачивай лодку)
Может хватит бухтеть и дестабилизировать ситуацию ? Есть инфа от знающего человека, что у нас во фронтенде скоро ожидаются реальные изменения...
🦜
Нормальная ли практика слушать socket.on в самих компонентах? Или можно сделать лучше?
не, компоненты должны только данные получать из сокетов, слушать что-то другое должно
Artem
не, компоненты должны только данные получать из сокетов, слушать что-то другое должно
И вернусь к мутации state = { data: [] } const data = this.state.data data.push(1); this.setState({ data }) тоже ведь плохая практика, мы мутируем стейт, однако eslint не ругается на такую запись. Хотя если мы будем мутировать объекты, то ошибки выскакивать будут.
Artem
Это я понимаю
Ilya
я увидел, что заменил и меня не переубедить
ну к примеру для каких то задач может быть удобно хранить данные в нормализованом виде. Тут конечно тоже можно сказать что это можно и на хуках замутить, но тогда и react не нужен -вежь можно все на чистом js замутить
Artem
state = { data: [] } const data = this.state.data.slice(); data.push(1); this.setState({ data }); Вот так правильно ведь?
Daniil
или как он там
Kirill
Artem
Спасибо!
Artem
правильно так this.setState(({data}) => ({data: [...data, 1]}));
А нормальная ли практика вызывать setState несколько раз для изменения нескольких разных данных в стейте, или лучше все делать за один setState?
Roman
Для асинхронных событий.
все равно не понимаю зачем он для них нужен
Artem
если с функцией внутри, то нормальная
Почему для стрелочных функций это норма, а для прямого изменения нет?
Maksim
прямое изменение это как?
Bogdan
Daniil
что? апдейт чего?
он про ререндер
Bogdan
он про ререндер
именно так
Maksim
смысле? push не запустит рендер
Artem
так пуш еще и не запустит апдейт
Так там setState после стоит для этого
Maksim
а, я проебал НЕ в начале
Bogdan
Так там setState после стоит для этого
я сейчас даже проверить не поленюсь, ссылка то старая осталась, может я не прав конечно
Bogdan