combineReducers如何提供正确的状态切片

时间:2017-03-27 20:07:08

标签: redux state reducers

我对Toolbar非常陌生。

我一直在读它的' Reducers documentation,遇到了我似乎无法理解的Redux函数。

他们注意到:

  
    

所有combineReducers()都会生成一个函数,使用根据键 选择的状态切片调用缩减器 ,并将其结果再次合并到单个对象中。 It's not magic

  

我确实理解它会像听起来一样返回一个组合的reducer,但它如何为每个reducer提供特定的相关状态片 - 根据其键是什么意思?

深入了解It's not magic git问题有助于我更多地了解combineReducers的使用情况,但我仍然无法理解根据其键

非常感谢任何解释,谢谢。

2 个答案:

答案 0 :(得分:2)

A :如果您的状态切片和缩减器功能具有相似的名称 - 该缩减器将随该切片一起提供。

实施例

const state = {
  slice1 : {...},
  slice2 : {...}
}

function slice1(state, action){...}
function slice2(state, action){...}

combineReducers({slice1, slice2})   //Reducers will be provided with appropriate slices.

B :如果您为combineReducers功能提供密钥,则这些密钥必须与状态切片密钥匹配。

实施例

const state = {
  slice1 : {...},
  slice2 : {...}
}

function reducer1(state, action){...}
function reducer2(state, action){...}

combineReducers({slice1 : reducer1, 
                 slice2 : reducer2})   //Reducers will be provided with appropriate slices.

C :两种方法都可以混合使用:

实施例

const state = {
  slice1 : {...},
  slice2 : {...}
}

function slice1(state, action){...}
function reducer2(state, action){...}

combineReducers({slice1, 
                 slice2 : reducer2})   //Reducers will be provided with appropriate slices.

答案 1 :(得分:1)

我认为如果您不熟悉新的ES6语法,可能会出现一些混淆。

如果查看redux文档,可以看到他们使用ES6 object literal shorthand syntax来定义对象形状

const rootReducer = combineReducers({
    theDefaultReducer,
    firstNamedReducer,
    secondNamedReducer
});

这个简短的手实际上可以翻译成:

var rootReducer = combineReducers({
    theDefaultReducer: theDefaultReducer,
    firstNamedReducer: firstNamedReducer,
    secondNamedReducer: secondNamedReducer
});

当您看到键与单独的单个Reducer匹配时,combineReducers就会知道要映射的内容。