Михаил
Если рез одинаковый
Антон
когда ты создаешь копию ты получаешь новую ссылку
Антон
и реакт видит, что состояние поменялось
Михаил
Я понимаю, ссылки и тп
Антон
если ты меняешь в старом объекте что-то, то реакт этого не видит, потому что ссылка осталась та же
Михаил
Но и добавляя в старый массив значения и потом вызывая setState будет работать
Антон
поэтому если ничего не менялось то ты передаешь state
Антон
а если менялось ...state
Антон
сет стейт создает новую ссылку)
Антон
потмоу что он асинхронен и иммутабелен)
Антон
что с объектами, что с хуками
Михаил
Ну, так новый массив создавать не надо
Михаил
Михаил
Так можно менять?
Антон
фотографии экрана с каждым днем все лучше и лучше))
Oleg
😆
Антон
можно так
Oleg
👍☝️🏃♂️🏃♂️🏃♂️
Антон
ты в локальный стейт запишешь этот параметр, если он был - перезатрет, если не было создаст
Антон
но если это на тестовое, то лучше поищи другой способ записи и вообще необходимость их записи в стейт. имхо это обычные переменные, которые я бы в стейте не хранил ни в локальном, ни в общем
Dmitry
этот не скриншот, это скринфот)
Антон
ну кто знает, следующая вешь, которая меня удивит будет фотография телефона, которым снимают экран..))
Антон
Михаил, не в обиду)
Dmitry
Я видел фотографию распечатки скриншота когда-то)
Антон
пф.. в суде и не такое бывает... заверенная нотариусом бумага, о том что истец человек)
Dmitry
Ну мало ли киборг, надо же убедиться)
Михаил
Михаил
Не новый
Антон
в чем суть задачи?
Михаил
Да это картинка с нета
Михаил
Вот и хочу разобраться
Михаил
Я слышал про то, что создают компию и сней работают
Михаил
Но тут пря в этом массиве
Михаил
как бы Вы записали
Михаил
?
Антон
смотря что за задача - если просто окрашивать кликнутые квадраты - то добавлял бы класс
Михаил
Михаил
А менять state
Антон
менять стейт - всегда делать копию объекта стейта
Антон
setState за кулисами это и делает
Антон
новый объект === обновление состояния приложения
Михаил
А на сайте Реакта
Михаил
Есть это подробно
Михаил
Как работает setState
Archer
Копию делаешь через { ... }
Archer
Или из глобального объекта Object
Archer
И зачем два раза setState
Archer
Ты своим = не создаёшь копию
Archer
А просто делаешь своего рода ссылку
Антон
цитата setState() добавляет в очередь изменения в состоянии компонента. ключевое слово изменения
Михаил
Я знаю
Антон
он сам по себе это подразумевает
Антон
нет изменений - твоя задача
Михаил
Сам
Archer
Стикеров не хватает, если делаешь копию объекта делай { ... }
Михаил
Михаил
Вопрос в другос
Archer
Жалко компа нет рядом
Archer
На телефоне лень писать пример
Oleg
напиши на компе и сфотай
Oleg
😎
Archer
Минут через 15 напишу если не забуду
Михаил
нет изменений - твоя задача
Коррче можно изменять и как копию массива создавать и как в массив state добавлять обьект а потом setState вызвать
Антон
можно в setState если вопросы оптимизации не важны
Archer
const { squares, count } = this.state;
const data = event.target.getAttribute('data');
const newSquares = { ...squares };
newSquares[data] = (count % 2 && 'o') || 'x';
this.setState({
count: count + 1,
squares: newSquares,
});
как то так наверно
Archer
ну или
const { squares, count } = this.state;
const data = event.target.getAttribute('data');
this.setState({
count: count + 1,
squares: {
...squares,
[data]: (count % 2 && 'o') || 'x'
}
})
Archer
если у тебя массив то не { ... } a [ ... ]
Михаил
Михаил
Что твой
Михаил
Так сысл в чем, в чем разница
Archer
дело не в том что работает, костыли тоже могут работать, разница в коде
Archer
допустим отпустим тот факт что ты делаешь "клон так"
const ... = ...;
но зачем два setState
Михаил
Archer
🐹
Archer
стикеров на тебя нет
Сергей
Иногда и без костыля никак.. особенно если глубина вложенности писец какая.. объект в массиве объектов которые в другом массиве который ещё в чем то..где то в редюсере для точечного изменения в самой глубине без костылей и не добраться..
Archer
каким образом вы такое получили?