combineReducers

151 阅读1分钟

返回一个总的reducer

管理多个reducer

const store = createStore(combineReducers({
  count:countReducer,
}),applyMiddleware(thunk,logger));
export default function combineReducers(reducers) {
  //返回一个总的reducer (preState,action) => nextState
  return (state = {}, action) => {
    //判断状态值是否改变
    let flag = false;
    const nextState = {};
    //将所有的rducer遍历出来
    for (let key in reducers) {
      let reducer = reducers[key];
      nextState[key] = reducer(state[key], action);
      //判断当前状态这下次状态是否改变,如果上次为true那就改变了
      flag = flag || nextState[key] !== state[key]
    }
    //如果前后俩个对象长度不一样也发生了改变
    flag = flag || Object.keys(nextState).length !== Object.keys(state).length

    return flag ? nextState : state;
  };
}