比方说,我有一家这样的商店:
{
modules: {
myModule: {
aFlag: true,
anotherFlag: false,
nestedItem: {...}
},
...
},
entities: {...},
...
}modules reducer是myModuleReducer内部的combineReducers({myModule: myModuleReducer}),我想将nestedItem的处理委托给另一个reducer,这样myModuleReducer就可以处理aFlag和anotherFlag的操作,而nestedItem就可以由nestedReducer处理。
我该怎么做呢?如果我为这些标志创建了一个嵌套的名称空间,那么使用combineReducers就会非常简单,例如,如果我有
myModule: {flags: {aFlag: true, anotherFlag: false}, nestedItem: {...}}我可以只执行myModuleReducer = combineReducers({flags: flagReducer, nestedItem: nestedReducer}),但是如果我不想为这些标志创建名称空间,而希望myModuleReducer处理这些标志,而希望nestedReducer处理nestedItem,该怎么办呢
我已经想出了一个类似这样的“模式”,使用reduce-reducers包:
const nestedReducers = combineReducers({
// defaults for slices of state not handled by nested reducers
aFlag: (state = initialState.aFlag) => state,
anotherFlag: (state = initialState.anotherFlag) => state,
// nested reducers for particular slices of state
nestedItems: nestedReducer
});然后
const finalReducer = reduceReducers(nestedReducers, myModuleReducer);通过这种方式,它似乎使nestedReducer处理nestedItems切片,而myModuleReducer处理状态的顶级部分(即aFlag和anotherFlag字段)。
但我不喜欢我需要为所有不是由嵌套reducer处理的东西传递这些默认函数。它能被避免吗?(当然,我可以将其抽象为某种nestReducers帮助器,但仍然如此)。一般来说,我的方法有什么问题?
https://stackoverflow.com/questions/47675701
复制相似问题