redux源码分析:createStore(reducer) 执行过程

creatStore 到底干了什么,下面分析一下执行过程
更新于: 2021-12-19 12:57:28
createStore 做了啥

先看看方法的执行过程

  1. 对这几个参数进行判断 reducer, preloadedState, enhancer 
    1. 当没有第3个参数的时候,会直接进行后续步骤
    2. 当含有第3个参数的时候,会直接 return enhancer(createStore)(reducer, preloadedState),由 enhancercreateStore 方法进行增强
  2.  初始化必要的闭包变量 currentReducer/currentState/currentListeners/nextListeners/isDispatching 等,这里相当于创建了一个作用域环境
  3. 基于闭包环境,生成一些方法
    1. ensureCanMutateNextListeners:工具方法 
    2. getState:取取得前的 state
    3. subscribe:对 render 方法的订阅
    4. dispatch:触发 action 的核心方法
    5. replaceReducer:忽略
    6. observable:忽略,与第三方库结合的时候用到的,这里没有深入研究
  4. 初始化状态: dispatch({ type: ActionTypes.INIT })
  5. 返回 createStore 的内容

伪代码如下

fuction createStore(reducer, preloadedState, enhancer){
  // 无情的省略号...
  // 返回
  return {
    dispatch,
    subscribe,
    getState,
    replaceReducer,
    [$$observable]: observable
  }
}