Skip to content

合并reducer ​

本节目标:理解“合并reducer”的核心思路,并能把它用于实际开发或面试表达。 当有两个以上的管理员时,每个分管不同的state值, 我们需要合并reducer以防代码重复

/**
*

将传入的reducer函数对象进行遍历处理, * 最终返回每一个reducer函数, * 这个函数调用后,返回每一个reducer函数处理后的state值组成的对象

* @param {Object} reducers

属性值是两个reducer函数

* @return {Function}
*/
let combineReducers = function (reducers) {
return function (state = {}, action) {
//

最终的状态

let obj = {};
for (let key in reducers) {
//reducers[key]

代表每个reucer函数 //我们让他执行,同时给他传参 //由于返回的reducer函数state初始值为空对象,state[key]为

undefined
//

当每个reducer函数执行时传递给他的state为undefined时,默认值会被调用 //每个reducer函数执行后,返回各自的默认

state
//

这样返回的obj对象包含了以reducer函数名为键,以对应reducer函数返回值为值的对象。

obj[key] = reducers[key](state[key], action);
}
return obj;
}
}
//

此时的reducer已经是一个经过combineReducers()处理过的函数 //它能对参数中的每一个reducer函数分别进行调用 //并最终返回一个state对象,它包含了每一个reducer函数处理的结果

let reducer = combineReducers({
counter,
todo
})
//

像单reducer函数一样调用 //我们将通过store.dispatch(action)调用

reducer();
let store = createStore(reducer);

本站总访问 — 次