首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在redux中嵌套reducers

在redux中嵌套reducers
EN

Stack Overflow用户
提问于 2017-12-06 21:38:09
回答 0查看 1.1K关注 0票数 2

比方说,我有一家这样的商店:

代码语言:javascript
复制
{
  modules: {
    myModule: {
      aFlag: true,
      anotherFlag: false,
      nestedItem: {...}
    },
    ...
  },
  entities: {...},
  ...
}

modules reducer是myModuleReducer内部的combineReducers({myModule: myModuleReducer}),我想将nestedItem的处理委托给另一个reducer,这样myModuleReducer就可以处理aFlaganotherFlag的操作,而nestedItem就可以由nestedReducer处理。

我该怎么做呢?如果我为这些标志创建了一个嵌套的名称空间,那么使用combineReducers就会非常简单,例如,如果我有

代码语言:javascript
复制
myModule: {flags: {aFlag: true, anotherFlag: false}, nestedItem: {...}}

我可以只执行myModuleReducer = combineReducers({flags: flagReducer, nestedItem: nestedReducer}),但是如果我不想为这些标志创建名称空间,而希望myModuleReducer处理这些标志,而希望nestedReducer处理nestedItem,该怎么办呢

我已经想出了一个类似这样的“模式”,使用reduce-reducers包:

代码语言:javascript
复制
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
});

然后

代码语言:javascript
复制
const finalReducer = reduceReducers(nestedReducers, myModuleReducer);

通过这种方式,它似乎使nestedReducer处理nestedItems切片,而myModuleReducer处理状态的顶级部分(即aFlaganotherFlag字段)。

但我不喜欢我需要为所有不是由嵌套reducer处理的东西传递这些默认函数。它能被避免吗?(当然,我可以将其抽象为某种nestReducers帮助器,但仍然如此)。一般来说,我的方法有什么问题?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47675701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档