Size: a a a

2020 March 08

SG

Stas G in React Kyiv
сравнивается возвращаемое значение
источник

PF

Pasha Finogenov in React Kyiv
То есть у меня изначально есть основной стейт с полями и объектами,
Я делаю копию его полей, объектов и возвращаю их с другими значениями
И после того как возврат сработал сравниваются значения полей основного стейта и значения моих копированных полей которые новые (они одноимённые) и в итоге они заменяются на новые?
источник

SG

Stas G in React Kyiv
ну если я тебя правильно понял, то да
источник

PF

Pasha Finogenov in React Kyiv
Сейчас сделаю иллюстрацию😂
источник

SG

Stas G in React Kyiv
просто погугли, как работает редакс
источник

SG

Stas G in React Kyiv
или посмотри исходный код
источник

PF

Pasha Finogenov in React Kyiv
Так в том то и дело, что погуглив я увидел только 'нужно делать копию, потому что иммутабельность'
источник

PF

Pasha Finogenov in React Kyiv
Я понимаю как оно работает, но у меня есть к этому вопросы
источник

PF

Pasha Finogenov in React Kyiv
источник

B

Bogdan in React Kyiv
Pasha Finogenov
То есть у меня изначально есть основной стейт с полями и объектами,
Я делаю копию его полей, объектов и возвращаю их с другими значениями
И после того как возврат сработал сравниваются значения полей основного стейта и значения моих копированных полей которые новые (они одноимённые) и в итоге они заменяются на новые?
Это важно для react-redux больше. Там при каждом изменении стора сравниваются старые и новые селектнутые данные
источник

PF

Pasha Finogenov in React Kyiv
то есть работают по такому принципу, как я расписал?
источник

PF

Pasha Finogenov in React Kyiv
Stas G
объекты в JS сравниваются по ссылке. и чтобы выяснить, были ли в объекте изменения, гораздо "дешевле" сначала сравнить новый и старый стейт через ===, чтобы не запускать каждый раз deepEqual, если на самом деле изменений-то и не было.

если ты возвращаешь новый объект, то у тебя сравнение двух объектов по ссылке возвращает false, и это уже сигнал, что пора проверять, где же были изменения
Стас написал:
"если ты возвращаешь новый объект, то у тебя сравнение двух объектов по ссылке возвращает false, и это уже сигнал, что пора проверять, где же были изменения"
Окей, но как оно вообще начинает сравнивать, если возвращается другой объект с такими же полями, как и у основного стейта, вот это мне непонятно
источник

SG

Stas G in React Kyiv
У тебя глобальный стор это словарь из объектов, которые ты собираешь с помощью combineReducers
источник

SG

Stas G in React Kyiv
Каждый объект - ветка стора
источник

SG

Stas G in React Kyiv
Вот если одна из веток возвращает новый обьект, то начинается оповещение подписок
источник

SG

Stas G in React Kyiv
Пытаюсь с ноута скинуть ссылку на сорцы, но инет тупит))
источник

SG

Stas G in React Kyiv
источник
2020 March 09

PF

Pasha Finogenov in React Kyiv
Ага, то есть у меня есть редьюсер с основным объектом state
Если я изменяю что-то, то в свиче я делаю копию основного state, изменяю его и свич возвращает Новый объект
Этот новый объект попадает в каждый редьюсер, сравнивая свои свойства со свойствами других объектов в каждом редьюсере (ну, по имени свойства),
совпадение получается в этом же редьюсере и эти свойства перезаписываются,
Происходит перерисовка
источник

SG

Stas G in React Kyiv
Типа того, только из каждого отдельного редюсера ты не весь стейт меняешь, а отдельную ветку
источник

SG

Stas G in React Kyiv
И это обновление вызывает новый рендер
источник