Как работает сравнение мелкого винта для подключенных компонентов? - PullRequest
2 голосов
/ 19 мая 2019

В соответствии с документацией о редуксе, редуктор всегда выдает новую копию состояния.В подключенном компоненте response-redux проводит поверхностное сравнение атрибутов, упомянутых в mapStateToProps. (Старый или новый реквизит).Моя путаница заключается в том, что, так как redux всегда предоставляет новую копию состояния, поверхностное сравнение, выполняемое response-redux, должно всегда давать false, а компонент должен всегда перерисовываться. Но этого не происходит.Может кто-нибудь объяснить, что мне не хватает?

Я считаю, что все атрибуты, прочитанные в mapStateToProp, являются объектами.

1 Ответ

0 голосов
/ 19 мая 2019

Мы оба согласны, что mapStateToProps не будет работать, если состояние хранилища одинаковое. Итак, в качестве документов для редуксов:

Компонент оболочки, сгенерированный connect, подписывается на Redux хранить. Каждый раз, когда действие отправляется, оно вызывает store.getState() и проверяет, если lastState === currentState. Если два государства Значения идентичны по ссылке, тогда он не будет повторно запустить ваш mapStateToProps, потому что она предполагает, что остальные состояние магазина тоже не изменилось.

Ответ для Почему мой компонент не выполняет повторный рендеринг или не запущен мой mapStateToProps? может описать ваш случай, поскольку вы могли случайно изменить свое состояние напрямую.

И так как вы используете 'Объединение редукторов' (что очень здорово), есть еще одно "Gotcha":

combineReducers служебная функция пытается оптимизировать обновления состояния. Если ни один из редукторов срезов не вернул новое значение, а затем CombinReducers возвращает старый объект состояния вместо нового. Это означает, что мутация в редукторе может привести к тому, что объект корневого состояния не будет обновлен, поэтому пользовательский интерфейс не будет повторно отображаться.

...