简介
大家在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的简单实现原理 如果单价看懂了 ,觉得对自己有帮助的话 别忘了一键三连哦!!多谢 多谢!