【问题标题】:How to make a rule for a set of combined reducers in Redux?如何为 Redux 中的一组组合 reducer 制定规则?
【发布时间】:2019-07-15 22:04:02
【问题描述】:

我有两个看起来像这样的标准减速器

减速器1

const reducer1 = (state, action) => {
  switch(action.type) {
    case('clear'):
      return {
        ...state,
        reducer1property1: null
      }
    ...<other cases>...
  }
}

Reducer2

const reducer2 = (state, action) => {
  switch(action.type) {
    case('clear'):
      return {
        ...state,
        reducer2property1: null
      }
    ...<other cases>...
  }
}

因此,如果我调度一个“清除”类型的操作,那么 property1 将在两个减速器中被清除。

我这样组合减速器:

const combinedReducer = combineReducers({
  Reducer1,
  Reducer2
})

我的问题是:有没有办法做到这一点,而无需分别在每个减速器中编写“清晰”案例?例如,有没有办法将“清除”案例添加到combinedReducer,以便我只能写一次?在我的实际应用中,有更多的 reducer,所以我希望简化。

谢谢!

【问题讨论】:

  • 什么是reducer1property1和reducer1property2?它们是减速器名称还是一些随机键?代码不再重复。这取决于reducer1property1 等。那么property1 将在两个reducer 中被清除。 - 那么它是property1 还是reducer1property1?

标签: javascript reactjs react-native redux


【解决方案1】:

这就是“高阶reducer”概念的用武之地。如果功能很常见,只需编写一次,然后使用该reducer“包装”任何其他需要该行为的reducer。在您的情况下,类似于:

const rootReducer = combineReducers({
    reducer1 : closeable(reducer1),
    reducer2 : closeable(reducer2),
});

请参阅Redux Docs page on "Reusing Reducer Logic"The Power of Higher Order Reducers 上的幻灯片,以及Redux Reducers and Selectors 上的其他一些文章,了解更多详情。

【讨论】:

    【解决方案2】:

    没有。组合减速器只接收减速器。

    由于每个 reducer 负责状态的不同部分,如果您希望将“清除”操作应用于所有 reducer,您必须在所有 reducer 中处理它。

    【讨论】:

    • 只是一个补充:发现关于 github.com/reduxjs/redux/issues/601 的古老而有趣的讨论也很少提到像 reduce-reducers 这样的库,它们可能会改变我们通常构建 store/reducers 的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2018-11-14
    • 2016-09-16
    相关资源
    最近更新 更多