Appearance
合并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);