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很高兴听到这个消息。但也许在这篇文章的主题上也有一些反馈?。。