Redux:combineReducers形状独立

时间:2017-05-03 14:24:18

标签: javascript reactjs redux

尝试将我的单个reducer拆分为不同的reducer combineReducers是redux为此提供的便利函数。 combineReducers虽然将状态限制为具有至少每个第一级状态键的reducer的特定状态。因此,在某些情况下,您必须添加超过所需的减速器或更改状态的形状。

更具体地假设应用程序的存储如下:

let store = {
    a: true,
    b: false,
    c: {...}
    d: {...}    
}

对于上面的商店,我需要为上面的每个键定义一个reducer并将它们组合起来,所以这将是这样的:

const reducerA = (state, action) => {...}
const reducerB = (state, action) => {...}
const reducerC = (state, action) => {...}
const reducerD = (state, action) => {...}

const rootReducer = combineReducers({
    a: reducerA,
    b: reducerB,
    c: reducerC,
    d: reducerD
});

我想保留reducerC& reducerD用于处理状态中的相应对象,但我需要有a&的常用缩减器。关于州的b个关键字。

如何在不定义这些额外缩减器的情况下添加根级状态键值reducerA& reducerB或使用公共reducer reducerAB添加父对象?这可能是使用combineReducers还是我应该以不同的方式处理所需的行为?

1 个答案:

答案 0 :(得分:2)

不,combineReducers的预期用例是专门拆分维护每个状态片的逻辑,并将该工作委托给单独的函数。如果您确实希望同一个函数实例管理ab,则需要将它们放在一个切片中(如state.ab.a),或者使用除combineReducers以某种方式。

您可能需要阅读Redux文档中的Structuring Reducers - Beyond combineReducers部分,以了解有关组织减速器逻辑的其他方法以及Redux FAQ question on sharing state between reducers的一些讨论。