combineReducers
принимает ряд редукторов в качестве параметров и возвращает редуктор. Конкретный редуктор, созданный combineReducers
, передает только часть состояния, присвоенного конкретному редуктору. Таким образом, каждый редуктор полностью отвечает за свою часть государства и не более того.
Но вы можете написать свой собственный combReducers, который может работать по-другому. Это просто сказать, что нет ничего особенного в отношении combineReducers
.
Редуктор - это просто функция, которая принимает состояние и действие и возвращает состояние с действием, применяемым в некотором роде. Или нет, по своему усмотрению.
Например, в Redux для отдельных ветвей состояния принято обрабатывать одни и те же (множество) действия, но обрабатывать их по-разному, что имеет смысл для этой части состояния. Каждое действие передается всем субредукторам на combineReducers
, что дает редукторам каждой ветви шанс либо что-то сделать, либо ничего.
Таким образом, в большинстве случаев редуктор несет исключительную ответственность за срез состояния и вспомогательных редукторов, таких как те, которые переданы в combReducers или редукторы, называемые вашими собственными редукторами, несут исключительную ответственность за их под-состояние/филиал.
Но ваши собственные редукторы могут вызывать вспомогательный редуктор и передавать ему все, что вам нравится, например, такое же состояние, которое уже было передано на какой-либо другой редуктор, или даже некоторые данные, которые он создал, без того, чтобы он когда-либо был доступен в глобальном государство.
Эти вещи не являются общими, но если вы видите необходимость и чувствуете себя уверенно продвигаться вперед, вам рекомендуется использовать то, что, по вашему мнению, лучше всего работает. Великая власть несет большую ответственность.
combineReducers
- это просто вспомогательная функция для общего использования. Наверное, самый чистый, чтобы сделать один редуктор ответственным за конкретную ветвь государства, но могут быть ситуации, когда вы считаете полезным делать что-то по-другому. Один редуктор может управлять сложным объектом с гнездом без вызова какого-либо другого редуктора, но общий шаблон - сделать меньшие редукторы для обработки деталей, если родитель становится громоздким.
Главное, чтобы понять, что редуктор всегда является чистой функцией, которая принимает состояние и действие и возвращает состояние. Как вы это делаете, это зависит от вас. Большинство разработчиков предпочитают следовать общим образцам, наблюдаемым в коде другого, например примерам Дэна Редукса или видео, которые он имеет на egghead.io.
Наступая на проторенную дорожку, часто это хороший способ начать работу, потому что он уже проверен.
К тому же важно всегда знать, почему что-то сделано. Разработчики иногда делают вещи более сложными, чем это должно быть из-за того, что они следуют примеру, который либо предназначен для чего-то другого, либо не был проработан очень хорошо для начала.
Также read this статья Dan.
Фантастически полезный ответ @DDS! Я понимаю все больше и больше каждый день ... Начну с стандартного подхода, позволяющего редуктору просто обрабатывать его собственное подмножество 'state' и посмотреть, не наткнулся ли я на какие-либо ограничения. Я подозреваю, что, если это самая лучшая практика в подавляющем большинстве ситуаций, это мне подойдет. Благодарю. –
@ Ответ DDS замечательный. Вы также можете прочитать новый раздел [«Структурирующие редукторы»] (http://redux.js.org/docs/recipes/StructuringReducers.html) в документах Redux, в котором описывается ряд полезных шаблонов, рецептов , и распространенные ошибки. – markerikson