Я знакомлюсь с концепцией композиции редукторов в Redux, и я был сбит с толку тем, как должно быть установлено начальное состояние в субредюсерах.
Аналогичный вопрос был этот, но он касается только редукторов верхнего уровня для каждой части дерева состояний.
Насколько я понимаю, каждый редьюсер должен предоставлять начальное состояние той части дерева состояний, за которую он отвечает.
Например, если бы у меня было такое дерево состояний:
{
dashboard:{
stats:{
sales:23,
purchases:22
},
messages:{
unread:3,
draft:5
},
//...etc
},
//...
}
И у меня был один редюсер верхнего уровня для дашборда, а так же редюсеры для stats
и messages
, должно ли исходное состояние для частей дашборда задаваться в редюсере дашборда, или в редьюсерах для каждой части, и если да, то как бы этот код выглядит?
Моя первоначальная мысль заключалась в том, чтобы реализовать редьюсер приборной панели следующим образом:
const initialState = {
stats: {},
messages: {},
//...
}
export default function dashboard(state = initialState, action) {
switch (action.type) {
case FETCH_STATS:
case FETCH_STATS_SUCCESS:
case FETCH_STATS_FAILURE:
return {
...state,
stats: stats(state.stats, action)
}
case FETCH_MESSAGES:
case FETCH_MESSAGES_SUCCESS:
case FETCH_MESSAGES_FAILURE:
return {
...state,
messages: messages(state.messages, action)
}
//...any other action cases
default:
const combined = combineReducers({
stats,
messages
})
return {
...state, //for any part without a reducer
...combined
}
}
}
Верны ли мои рассуждения? Любые предложения по улучшению также приветствуются.