redux中的嵌套还原程序
比如说,我有一家这样的商店:redux中的嵌套还原程序,redux,Redux,比如说,我有一家这样的商店: { modules: { myModule: { aFlag: true, anotherFlag: false, nestedItem: {...} }, ... }, entities: {...}, ... } 和modulesreducer是combinereducer({myModule:myModuleReducer}) 在myModuleReducer内部,我想将nested
{
modules: {
myModule: {
aFlag: true,
anotherFlag: false,
nestedItem: {...}
},
...
},
entities: {...},
...
}
和modules
reducer是combinereducer({myModule:myModuleReducer})
在myModuleReducer
内部,我想将nestedItem
的处理委托给另一个reducer,这样myModuleReducer
将处理aFlag
和另一个标志的操作,而nestedItem
将由nestedReducer
处理
我该怎么做?
如果我为那些标志创建一个嵌套的名称空间,也就是说,如果我有
myModule: {flags: {aFlag: true, anotherFlag: false}, nestedItem: {...}}
我可以只做myModuleReducer=combinereducer({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
字段)
但是我不喜欢这样,我需要传递那些默认函数来处理嵌套减速器不能处理的所有事情。可以避免吗?(当然,我可以将其抽象为某种类型的nestReducers
helper,但仍然如此)。一般来说,我的方法有什么问题?您可以在myModuleReducer
函数中手动执行,如下所示:
function myModuleReducer(state = someInitialState, action) {
// Call nestedReducer here
const reducedNestedItem = nestedReducer(state, action)
switch (action.type) {
case 'MY_ACTION_TYPE':
return Object.assign({}, state, {
aFlag: // aFlag logic
anotherFlag: // anotherFlag logic
nestedItem: reducedNestedItem
})
default:
return state
}
}
您只需确保,如果您这样做,您将遵循Redux的纯度哲学。谢谢!我试图实现的是完全忽略动作,对应于myModuleReducer
中的nestedReducer
。可能吗?在编辑我的文章时,你们对我刚才添加的方法有什么看法?你们是我的超级粉丝,一方面,我很遗憾知道你们放弃诗歌而去追求工程职业,但嘿,若这能让你们高兴的话,我100%支持你们@TobiaTesan很高兴听到这个消息。但也许在这篇文章的主题上也有一些反馈?。。