我有两个看起来像这样的标准减速器
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
上,以便我只能写一次?在我的实际应用中,还有更多的减速器,因此我希望简化。
谢谢!
答案 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)
不。联合减速器仅接收减速器。
由于每个减速器都负责状态的不同部分,因此如果您希望对所有减速器应用“清除”操作,则必须在所有减速器中对其进行处理。