Все редукторы будут вызываться, когда будет отправлено действие?
Я использую combReducers для объединения всех редукторов для создания магазина, означает ли это, что любое действие, отправленное из любого представления, приведет к вызову всех редукторов для проверки типа действия? Является ли это видом низкой эффективности?
Или я не совсем понимаю принцип дизайна сокращения?
Ответы
Ответ 1
Да, это правильно.
Однако один из вариантов, который вы должны оптимизировать для этого поведения (рекомендуется из документов Redux), заключается в использовании 'reselect' https://github.com/rackt/reselect
Reselect в основном позволяет создавать memoized селекторов, посредством чего вы можете сказать, что реквизит A зависит от состояния B и состояния C, и поэтому только перекомпоновать реквизиты A, если изменяется состояние B или состояние C.
Обратите внимание, что это все равно вызовет запуск всех редукторов (и пройдите через оператор switch, чтобы увидеть, может ли к ним применить действие). Я полагаю, что этого поведения нет. Однако использование повторного выбора означает, что ваш компонент верхнего уровня получит только изменение prop/state, если произошли фактические изменения, которые влияют на это состояние, вместо того, чтобы каждый раз запускать изменение и заставлять React повторно отображать все, даже если это изменение не повлияло потому что это было где-то не связанным. (Readme в reselect объясняет лучше)
Ответ 2
Да - все редукторы будут вызваны при отправке действия. Вы получите один хороший побочный эффект. Поскольку каждый редуктор возвращает состояние по умолчанию, если действие не найдено, вы получаете свое начальное состояние с помощью одного действия.
Это может быть полезно, хотя я еще не пробовал его, чтобы одно действие воздействовало на несколько редукторов, а также изменение состояния в двух разных частях хранилища.
Когда вы добавляете повторно выбранный текст, как показано на рисунке, вы можете получить много болевых результатов!
Мой текущий стек:
- Redux для состояния, управления действиями
- Повторно выберите для слоя преобразования данных
- Реагировать на представления
Добавление повторной выборки к рабочему потоку и обеспечение ее работы вместе с редукторами было лучшим, что случилось со мной на прошлой неделе.