一、依赖:$$observable、ActionTypes、isPlainObject

二、接下来看到直接 export default 一个 createStore 函数,下面根据代码以及注释来分析这个函数

1、函数本身

  注释大致意思解读:

  这个函数用来创建一个保存 state tree (状态树) 的 Redux store。

  你唯一能修改 store 里面的 data 数据的方式是通过调用 dispatch() 方法。

  在你的APP中只能存在一个 store。

  如果要指定 state tree 的不同部分如何相应 actions 的操作,你可以用 combineReducers 方法来合并几个 reucer 到一个 reducer 函数中。

2、参数:reducer、preloadedState、enhancer

  reducer :function 类型。一个传入 current state (当前state) 和 要处理的 action ,返回新的 state tree 的函数。

  preloadedState:可以是任何类型。初始的state。如果你使用 combineReducers 去生产根 reducer 函数,它必须是一个与 combineReducer 的键相同的对象。

  enhancer:function 类型。store 的增强器。你可以选择指定它来增加具有第三方第三方能力的 store。唯一一个跟 Redux 一起使用的 enhancer 是 applyMiddleware()。

3、返回值 store

  一个可以读取 state、dispach(调度) actions 和 subscribe(监听)变化 的 Redux store。

4、函数体

  1)、刚开始就是三个 if 判断

    第一个判断,如果传入的 preloadState 是一个函数,并且 enhancer 是 undefined的,那么就认为用户第二个参数传入的是 enhancer 而不是 preloadState,进行相应的赋值操作。

    第二个判断,如果 enhancer 存在了,但是它不是一个 function,那么就报错:enhancer 必须是一个函数。如果判断是一个函数,则return enhancer(createStore)(reducer, preloadState),执行中间件的函数,至此,该文件下面的内容就不执行了。

    第三个判断,如果 reducer 不是 function 类型的,则报错:希望 reducer 是一个函数。

05-11 22:35