最近在了解react+redux的开发方式,感觉redux的代码组织方式有点散,reducer和action一般是相互独立开来写的,如果项目大一点会有多个子reducer再合并成一个rootReducer,如果你要在redux里面实现异步获取数据,还得引入中间件。
为了搞清中间件与store的猫腻,我翻看了一下redux对这一块的实现代码,现把理解的给大家做个分享,希望能对大家有所帮助。
store是通过createStore来创建的,createStore方法可以接受三个参数,参数一:reducer函数;参数二:initState;参数三:中间件函数(注当没有传initState时,这个参数可以变为参数二)。参数一是必须的,其它的都是可选参数。
中间件都会通过applyMiddleware函数加工一下,applyMiddleware这是一个高阶函数,它会生成一个接受createStore函数的中间件函数,把生成的中间件函数做为createStore的第二或第三参数传到createStore里,createStore函数检测到有中间件函数后会把自身做为参数传给中间件函数并执行后得到新的createStore函数,这个过程主要是为了实现对原来createStore函数生成的dispatch方法的再包装,给他赋予了中件函数要实现的能力,然后用新的createStore取代原来的createStore继续执行。
所以中间件主要的作用就是为了改变或者说加强原来的store.dispatch方法的功能。
以上是我最近学习的一些心得,如果有什么地方说得不到位,欢迎给予指正