如何为Redux中的一组组合减速器制定规则?

时间:2019-02-21 21:24:12

标签: javascript reactjs react-native redux

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

Reducer1

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>...
  }
}

因此,如果我调度类型为“ clear”的动作,则两个减速器中的property1都将被清除。

我将减速器这样组合:

const combinedReducer = combineReducers({
  Reducer1,
  Reducer2
})

我的问题是:有没有一种方法可以在每个减速器中不单独编写“ clear”案例?例如,是否有一种方法可以将'clear'大小写添加到combinedReducer上,以便我只能写一次?在我的实际应用中,还有更多的减速器,因此我希望简化。

谢谢!

2 个答案:

答案 0 :(得分:2)

这是“高阶减速器”概念出现的地方。如果该功能是通用的,则编写一次,然后使用该减速器“包装”其他需要该行为的减速器。就您而言,类似:

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上。

答案 1 :(得分:1)

不。联合减速器仅接收减速器。

由于每个减速器都负责状态的不同部分,因此如果您希望对所有减速器应用“清除”操作,则必须在所有减速器中对其进行处理。