redux源码 | Part3_combineReducers && bindActionCreators
学习资料
redux
源码 v 4.x
学习目标
- redux源码createStore(Part1)
- redux中间件原理(Part2)
- redux源码combineReducers(Part3)
过程解析
getUndefinedStateErrorMessage
1 | function getUndefinedStateErrorMessage(key, action) { |
getUnexpectedStateShapeWarningMessage
getUnexpectedStateShapeWarningMessage函数:一些错误性的处理
1 | function getUnexpectedStateShapeWarningMessage( |
assertReducerShape(reducers)
assertReducerShape函数:
这部分函数其实就是对reducer的一个校验
1 | /* |
combineReducers(reducers)
combineReducers函数:用于合并reducers
基本思路:
- reducers浅复制到finalReducers里面
- reducers基本校验
- 返回combination函数
combination函数:
基本思路:
- 基本性的检测
- 维护两个变量hasChanged = false[用于监听状态有没有改变]和nextState = {}[用于存更新后的状态]
- 遍历finalReducers,获取reducer和state里面存储的reducer所需要的state
- 通过reducer(state,action)得到新的状态
- 得到新的状态存入nextState里面
- 判断是否状态改变
- 最终判断状态改变否
1 | /* |
bindActionCreators(actionCreator, dispatch)
bindActionCreator函数:
将一个或多个action和dispatch组合起来生成
mapDispatchToProps
需要生成的内容connect(mapStateToProps, mapDispatchToProps)(UI component) connect用以从UI组件生成容器组件
mapStateToProps:将state映射到UI组件的参数(props)
mapDispatchToProps:将用户对UI组件的操作映射成Action
1 | function bindActionCreator(actionCreator, dispatch) { |