Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
Базовые концепции редюсеров
Как описано в "Основы Redux" Часть 3: Состояние, действия и редюсеры, функция редюсера в Redux:
-
Должна иметь сигнатуру
(previousState, action) => newState, аналогичную функции, передаваемой вArray.prototype.reduce(reducer, ?initialValue) -
Должна быть "чистой" (pure), что означает:
- Не должна выполнять побочные эффекты (например, вызовы API или изменение нелокальных объектов/переменных)
- Не должна вызывать нечистые функции (такие как
Date.nowилиMath.random) - Не должна мутировать свои аргументы. При обновлении состояния редюсер не должен изменять существующий объект состояния напрямую. Вместо этого он должен создавать новый объект с необходимыми изменениями. Этот же подход применяется к любым вложенным объектам в состоянии, которые обновляет редюсер.
Примечание о неизменяемости, побочных эффектах и мутациях
Мутации не рекомендуются, поскольку они нарушают работу time-travel отладки и функции
connectв React Redux:
- Для time-travel отладки Redux DevTools ожидают, что воспроизведение записанных действий приведёт к конкретному состоянию без дополнительных изменений. Побочные эффекты вроде мутаций или асинхронного поведения изменят поведение между шагами time-travel, нарушая работу приложения.
- В React Redux функция
connectпроверяет изменения пропсов изmapStateToPropsдля определения необходимости обновления компонента. Для оптимизацииconnectиспользует сокращения, полагающиеся на неизменяемость состояния, и поверхностные проверки равенства ссылок. Это означает, что изменения объектов и массивов через прямую мутацию не будут обнаружены, и компоненты не перерисуются.Другие побочные эффекты (генерация уникальных ID, временных меток в редюсере) делают код непредсказуемым и усложняют отладку и тестирование.
Из-за этих правил критически важно полностью понять следующие базовые концепции перед изучением специфических техник организации редюсеров в Redux:
Основы редюсеров Redux
Ключевые концепции:
-
Мышление в терминах состояния и его структуры
-
Делегирование ответственности за обновление по частям состояния (композиция редюсеров)
-
Редюсеры высшего порядка
-
Определение начального состояния редюсера
Материалы для изучения:
Чистые функции и побочные эффекты
Ключевые концепции:
-
Побочные эффекты
-
Чистые функции
-
Мышление в терминах комбинирования функций
Рекомендуемые материалы:
Управление неизменяемыми данными
Ключевые концепции:
-
Мутабельность vs неизменяемость
-
Безопасное обновление объектов и массивов без мутаций
-
Избегание функций и операторов, изменяющих состояние
Рекомендуемые материалы:
Нормализация данных
Ключевые концепции:
-
Структура и организация базы данных
-
Разделение реляционных/вложенных данных на отдельные таблицы
-
Хранение единственного определения для каждого элемента
-
Ссылки на элементы через ID
-
Использование объектов с ключами-ID как lookup-таблиц и массивов ID для отслеживания порядка
-
Установление связей между элементами
Рекомендуемые материалы: