Size: a a a

React — русскоговорящее сообщество

2021 June 27

ПК

Павел Конин (HappyWa... in React — русскоговорящее сообщество
Может кто подсказать?

в конструкторе:
this.setBotTypeState = this.setBotTypeState.bind(this);


В компоненте родителе:
  async componentDidMount() {
   const results = await loadBots();
   this.setState({bots: results.bots})
 }

Также метод, для изменения типа бота, без перезагрузки с апи
  setBotTypeState = (botId, type) => {
   let bots = this.state.bots;
   bots[bots.findIndex((bot => bot.id == botId))].type = type;
   
   this.setState({
     ...this.state,
     bots: bots
   });
 }

Передаю пропсами в дочерний компонент, вызываю, но ничего не происходит (консоль лог выводит данные, но состояние не изменяется)

Что не так?
источник

D

Dissar in React — русскоговорящее сообщество
Всем привет.

Есть какие-нибудь распространенные практики по организации роутов в Реакт приложениях?

Писать файл на 3к строк, который состоит из Switch и Route, лично мне кажется, неудобно
источник

M

Mark in React — русскоговорящее сообщество
если у тебя bots массив, то возможно ссылка на объект bots при изменении type не меняется, а значит state не меняется
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
bots является тем же объектом, ререндер вызовется только если ты новый объект передашь.

setState в классовых компонентах умеет обновлять стейт порционно, т.е. тебе не нужно ...this.state писать

Можно как-то так, например
setBotTypeState = (id, type) => this.setState({
 bots: this.state.bots.map(
   bot => bot.id === id
     ? ({...bot, type})
     : bot
 )
})
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
Если твой код минимально изменять, то ошибка в первой строке в setBotTypeState

setBotTypeState = (botId, type) => {
 let bots = [...this.state.bots];
 bots[bots.findIndex((bot => bot.id == botId))].type = type;
   
 this.setState({
   ...this.state,
   bots: bots
 });
}
источник

ПК

Павел Конин (HappyWa... in React — русскоговорящее сообщество
Большое спасибо за объяснение. Теперь понял, что не так)
источник

M

Mark in React — русскоговорящее сообщество
красиво. сижу учу реакт, такие куски кода полезны)
источник

ПК

Павел Конин (HappyWa... in React — русскоговорящее сообщество
К слову, второй код не работает по какой-то причине. Но вот первый - шикарный.
Разве что во второй строчке this.state.bots.map
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
А ещё если ты юзаешь стрелочные функции в классах, то их не нужно привязывать в конструкторе явно.
Стрелочные функции используют контекст объявления, поэтому они будут привязанными сразу
источник

ПК

Павел Конин (HappyWa... in React — русскоговорящее сообщество
Про это знал, но т.к. проблема была с изменением состояния, решил на всякий случай дописать бинды)
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
Там ещё скобки кстати лишние в findIndex
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
Да, точно, молодец) this.state забыл

Странно, что твой код с изменениями не работает. Вот набросал по-быстрому https://codesandbox.io/s/icy-sun-hcl9y?file=/src/App.js
источник

ПК

Павел Конин (HappyWa... in React — русскоговорящее сообщество
Не работал как раз-таки из-за моих двух скобок) Да и мне понравился первый код, буду теперь так писать). Хотя странно, в песочнице работает с двумя скобками. Не понятный момент
источник

SG

Sos Genrikovich in React — русскоговорящее сообщество
Не, в песочнице одни скобки
источник

D

Dissar in React — русскоговорящее сообщество
Встречал упоминание, что useEffect это не тоже самое что и у классовых компонентов CDM и CDU (lifecycle hooks).

Может кто знает автора/саму статью - поделитесь, пожалуйста. Хочу перечитать
источник

T

Tim in React — русскоговорящее сообщество
Это смесь этих дидмоунтов
источник

D

Dissar in React — русскоговорящее сообщество
Про это мне известно, но речь была как раз про то, что это не тоже самое
источник

EC

Egor Cherniakov in React — русскоговорящее сообщество
hello
источник

XX

Xodor Xodorenko in React — русскоговорящее сообщество
я удалил папку которая мне не нужна и не используется ,но пишет такое ,Как исправить?
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
убрать импорт из файла
источник