我开始了解Redux中的reducer组合概念,我对如何在sub-redurs中设置初始状态感到困惑。
类似的问题是this,但它仅涉及状态树每个部分的顶级缩减器。
据我了解,每个reducer应该为它负责的状态树部分提供初始状态。
例如,如果我有这样的状态树:
{
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
}
}
}

我的推理是否正确?任何改进建议也欢迎。
答案 0 :(得分:1)
要么工作。我唯一想到的是,如果没有初始状态,它就不适合 Redux 减速器的定义;它不会孤立地工作,因为Redux期望初始状态不会被定义。
在任何情况下,将子减速器上的初始状态设置为
是相当无害的export default function stats(state = {}, action) {
// ... whwtever
}