Reducers¶
NgRx Reducers являются чистыми функциями и отвечают за смену состояния хранилища в Angular приложении в ответ на возникновение действия, при этом каждый редюсер может изменять только определенную часть состояния.
Изменить состояние в NgRx можно ТОЛЬКО с использованием редюсеров.
users.actions.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
users.reducer.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Любое действие, отправляемое в хранилище методом dispatch(), передается всем редюсерам, каждый из которых либо изменяет состояние согласно текущему действию, либо возвращает состояние нетронутым, если обработка такого действия в нем не предусмотрена.
Все изменения состояния хранилища происходят в Angular приложении синхронно, а их порядок зависит от порядка регистрации самих NgRx Reducers.
Редюсер принимает два аргумента:
- часть текущего состояния, за обработку которого он ответственен;
- обрабатываемое действие.
Поскольку все NgRx Reducers обрабатывают определенный набор действий и всегда должны возвращать состояние, здесь очень удобно применение оператора switch.
При первом вызове редюсера в качестве значения состояния ему передается undefined, поэтому очень важно определить значение части хранилища по умолчанию, которое задаст необходимую структуру и, если это необходимо, исходные значения свойств этой структуры.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Для содержания кода вашего Angular проекта в чистоте и во избежании путаницы, рекомендуется NgRx Reducers и обрабатываемые ими действия хранить в разных файлах. Подробно здесь.
В приложении регистрация NgRx Reducers осуществляется с помощью метода forRoot() модуля StoreModule.
1 2 3 | |
Методу должен передаваться объект, ключами которого являются имена частей, формирующих глобальное хранилище, а их значениями — редюсеры, возвращающие значение этих частей хранилища.