Size: a a a

2020 July 16

IN

Igor N in Frontend_ru
источник

BM

Brs Mdrk in Frontend_ru
Backend Разработчик
В React мутировать this.state.something и вызывать setState это норм или лучше сделать копию this.state.something.concat(), и её пробрасывать в setState?
ну в доке же написано как надо делать
источник

B

Backend Разработчик... in Frontend_ru
Brs Mdrk
ну в доке же написано как надо делать
Не нашел описания конкретно моего случая
источник

BM

Brs Mdrk in Frontend_ru
Backend Разработчик
Не нашел описания конкретно моего случая
источник

BM

Brs Mdrk in Frontend_ru
недостаточно конкретно?
источник

B

Backend Разработчик... in Frontend_ru
Brs Mdrk
недостаточно конкретно?
Там сказано про то что изменения не вызовут render компонента и то что для отображения изменений нужно использовать setState
источник

BM

Brs Mdrk in Frontend_ru
если стейт напрямую мутировать, то изменения потеряются, после обновления компонента
источник

BM

Brs Mdrk in Frontend_ru
написано же, не изменять стейт напрямую
источник

B

Backend Разработчик... in Frontend_ru
Brs Mdrk
написано же, не изменять стейт напрямую
Написано, но не сказано почему)
источник

BM

Brs Mdrk in Frontend_ru
почему нужно смотреть в исходниках))
источник

B

Backend Разработчик... in Frontend_ru
Ну я понял что надо запомнить что он иммутабельный и нужно делать копию со своими изменениями и только потом прокидывать. Просто оно и так работает, не очевидно почему нельзя изменять, но как подсказали в другом чате, в стейте может быть несколько ссылок на один объект и изменения напрямую приведут к проблемам...
источник

B

Backend Разработчик... in Frontend_ru
Просто лень писать .concat() 😄
источник

B

Backend Разработчик... in Frontend_ru
Да и память лишний раз аллоцировать...)
источник

BM

Brs Mdrk in Frontend_ru
можно immer использовать
источник

BM

Brs Mdrk in Frontend_ru
Backend Разработчик
Да и память лишний раз аллоцировать...)
ну там при обновлении компонента куда больше ресурсов используется, поэтому какой-то там один массивчик роли не сыграет
источник

B

Backend Разработчик... in Frontend_ru
Brs Mdrk
можно immer использовать
Спасибо, взял на заметку
источник

B

Backend Разработчик... in Frontend_ru
Backend Разработчик
Просто лень писать .concat() 😄
Как оказалось .concat() создаёт поверхностную копию и изменения проходят до вызова setState, смысла использовать его нет никакого...
источник

B

Backend Разработчик... in Frontend_ru
Чтобы state не изменился, я не нашел другого пути, как:
 onChangeName(name, index) {
   const users = JSON.parse(JSON.stringify(this.state.users))
   users[index].name = name
   this.setState({users})
 }

И что все реально так пишут?))
источник

BM

Brs Mdrk in Frontend_ru
Backend Разработчик
Чтобы state не изменился, я не нашел другого пути, как:
 onChangeName(name, index) {
   const users = JSON.parse(JSON.stringify(this.state.users))
   users[index].name = name
   this.setState({users})
 }

И что все реально так пишут?))
В здравом уме никто так не делает
источник

BM

Brs Mdrk in Frontend_ru
State нужен не для этого)
источник