深度剖析 Redux applyMiddleWare的原理,小伙看了一下午 ,头发掉了好多

简介
大家在redux的编程过程中不免要使用中间件 以为reducer是纯函数,不允许在其中做一些有副作用的事情
于是我们需要中间件来帮我们做这些有副作用的事。
于是在创建仓库store 时 createStore 就有了第二个参数applyMiddleWare

const store=createStore(reducer,applyMiddleWare(中间件))

那么大家关注过中间件的执行原理吗?我们是否可以自己实现一个简易的中间件机制呢!话不多说 ,直接上代码 ,代码中加了许多备注 可以确保大家都可以看得懂

首先applyMiddleWare 接受的参数为中间价 例如 thunk、saga 等 他的返回值官方定义是一个enhancer函数
那么问题来了 什么是enhancer函数呢!
该函数接收参数createStore 并且他的返回值也是一个类似于createStore的函数 也就是说,他的返回值也会产生一个新的”“store“ 其实applyMiddleWare的本质就是返回一个新的dispatch 进而返回新的store

function applyMiddleWare(middleware) {
  //返回值是一个enhancer函数 他接收一个createStore 返回一个新newCreateStore
  function enhancer (createStore) {
  //返回值是类似于 createStore的函数
    function newCreateStore(reducer) {
    //根据上两个函数获取到的参数,获取store 
      const store =createStore(reducer)
      //将store传递给中间件,中间件会返回第二层函数,该函数会以之前的dispat为参数,生产新的dispaatch
      const func=middleware(store)
      //解构出之前的dispatch
      const {dispatch}=store
      //将解构出的dispatch传递给该参数
      const newDispatch =func(dispatch);
     //最后返回新的dispath 生成了与原先不同的store 
      return {...store,dispatch:newDispatch}
      //如果 调用store.dispatch 就会传递到中间件中 ,中间件经过相应处理后,在内部dispatch(action)触发reducer修改数据(这涉及到中间件内部执行函数 我们下期再聊!!!) 
    }
    return newCreateStore 
  }
  return enhancer
}

这就是 applyMiddleware的简单实现原理 如果单价看懂了 ,觉得对自己有帮助的话 别忘了一键三连哦!!多谢 多谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值