Структурирование редьюсеров
В основе Redux лежит достаточно простая концепция: вся логика «записи» содержится в одной функции, и единственный способ запустить эту логику — передать Redux простой объект, описывающий произошедшее событие. Redux-хранилище вызывает эту функцию обработки и передает ей текущее состояние дерева и описательный объект. Функция обработки возвращает новое состояние дерева, и Redux-хранилище уведомляет всех подписчиков об изменении состояния дерева.
Redux накладывает некоторые базовые ограничения на работу этой функции обработки. Как описано в Редьюсерах, она должна иметь сигнатуру (previousState, action) => newState, известную как функция-редусер, и должна быть чистой и предсказуемой.
Помимо этого, Redux не очень заботится о том, как вы фактически структурируете свою логику внутри функции-редусера, если она соблюдает эти базовые правила. Это одновременно источник свободы и путаницы. Однако существует ряд распространенных шаблонов, которые широко используются при написании редьюсеров, а также ряд связанных тем и концепций, о которых следует знать. По мере роста приложения эти шаблоны играют важную роль в управлении сложностью кода редьюсеров, обработке реальных данных и оптимизации производительности пользовательского интерфейса.
Предварительные концепции для написания редьюсеров
Некоторые из этих концепций уже описаны в другом месте документации Redux. Другие являются общими и применимы вне Redux, и существует множество статей, подробно описывающих эти концепции. Эти концепции и методы образуют основу для написания надежной логики редьюсера Redux.
Крайне важно, чтобы эти предварительные концепции были тщательно изучены перед переходом к более сложным и специфичным для Redux методам. Рекомендуемый список литературы доступен по адресу:
Предварительные концепции
Также важно отметить, что некоторые из этих рекомендаций могут быть или не быть непосредственно применимыми в зависимости от архитектурных решений конкретного приложения. Например, приложение, использующее Immutable.js Maps для хранения данных, скорее всего, будет иметь структуру логики редьюсера по крайней мере немного отличающуюся от приложения, использующего обычные Javascript объекты. Данная документация в основном предполагает использование обычных Javascript объектов, но многие принципы по-прежнему будут применяться при использовании других инструментов.
Концепции и методы редьюсеров
- Базовая структура редьюсера
- Разделение логики редьюсера
- Пример рефакторинга редьюсеров
- Использование
combineReducers - Выходя за рамки
combineReducers - Нормализация формы состояния
- Обновление нормализованных данных
- Использование повторно логики редьюсера
- Шаблоны обновления неизменяемых объектов
- Инициализация состояния
© 2015–2017 Dan Abramov
Licensed under the MIT License.
http://redux.js.org/docs/recipes/StructuringReducers.html