###1 先贴上createStore源码
看了源码我对redux的认识才开始清晰,现在终于明白,不看源码学框架就是没事儿找刺激啊,不知道底层如何实现,学起来就是举步维艰;
|
|
- var store = createStore(reducer , preLoadState , enhancer) 定义一个store的时候可以传递reducer函数,state初始状态
- 注意createStore之后,会先默认执行dispatch函数一次,看源码注意下这一点.通过这次默认执行dispatch函数,reducer函数就会执行,可以初始化state状态
- dispatch函数执行的时候,由于刚创建store并没有通过subscribe绑定listeners,所以listeners在createStore的时候不会执行.
- getState( )函数用来获取state下一个状态
- dispatch(action)函数,
- 用来根据不同的action,调用reducer函数改变state状态
- 依次执行所有通过subscribe订阅到listeners数组中的函数;
- 返回一个传入的action对象
- subscribe( listener ) 用来向listeners数组中添加监听器
- replaceReducer( nextReducer ) 替换 reducer 为 nextReducer
|
|
2 我们来结合一个小栗子看下createStore在状态管理过程中所扮演的角色
2.1 还是老惯例,看下引入redux之后,文件中对象有什么
|
|
|
|
2.2 reducer函数的定义为什么总是第一个参数是state,第二个参数是action?
我们定义的reducer函数要返回一个reducer处理之后的state,赋值给currentState,然后通过getState就可以获取当前状态;
源码中有如下两行代码,可以看出
|
|
- 当我们创建一个store的时候,createStore接受两个参数,一个是reducer函数,一个是initialState初始状态,
- 然后 var currentReducer = reducer ; var currentState = initialState;
- 当我们调用dispatch的时候,dispatch执行的过程中,会调用reducer函数,reducer函数就是我们处理state的方法
- dispatch函数中在调用reducer的时候,会向其中传递两个参数,一个是initialState对象,一个是action对象;dispatch函数执行后返回的是传入的action
- 注意定义reducer的时候,必须要返回一个state状态,防治state状态的丢失.
2.3 初始化state的两种方式,
- 通过createStore(reducer , initialState)
- 通过reducer(state = initialState , action )
|
|
|
|
3 ES6语法新特性 bable在线编译工具
ES6
|
|
经过转化为ES5
|
|