Redux源码解析一 createStore.js

createStore.js 代码

createStore是一个方法,可以看到有三个参数

reducer:action处理函数reducer

preloadedState:初始状态state

enhancer:增强器函数,也就是我们说的中间件函数

 首先是三个if判断,可以看到reducer必须是函数,preloadedState必须非函数,如果preloadedState是函数,那么第二个if判断(44行)会把它赋值给enhancer。第三个if判断(49行)执行增强器函数。

 if (typeof enhancer !== 'undefined') {
    if (typeof enhancer !== 'function') {
      throw new Error(
        `Expected the enhancer to be a function. Instead, received: '${kindOf(
          enhancer
        )}'`
      )
    }

    return enhancer(createStore)(reducer, preloadedState)
  }

1 处理中间件函数

这里 直接 return enhancer(createStore)(reducer, preloadedState)

enhancer是一个高阶函数,入参是createStore方法本省,这是一个剥洋葱模型,把函数返回结果当作下一个函数的入参,然后一步一步走下去,到最后之后  ,其实会执行createStore(reducer, preloadedState),然后再一步一步返回,最后执行58行的返回执行完毕。

2 执行 dispatch

可以看到createStore函数内部就只执行了dispatch方法之后就返回了。

dispatch({ type: ActionTypes.INIT })

 dispatch方法会传入一个默认的action{type: ActionTypes.INIT}

ActionTypes.INIT是一个随机生成的字符串,具体方法自己去看,我们继续往下看。

action必须是一个对象,执行currentState = currentReducer(currentState, action) (218行)currentReducer就是createStore的入参reducer(也就是combineReducers返回的那个方法),生成的currentState也就是最新默认state。

推广一下自己开发的微信小程序,有兴趣的朋友可以玩一玩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值