Redux源码阅读笔记 #75
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
redux的源码相对来说比较简单,因为它仅仅是一个js库,不包含框架相关的知识,在去年其实就看过源码了,但是最近回想起来感觉都忘了,所以写一篇笔记记录这里的
redux版本是最新的v4.0.5原理简析
先简单叙述一下部分的实现原理
createStore
调用
createStore有2种情况,传入了增强器enhancer时,会将createStore传入enhancer,也就是在enhancer里创建了store后,把store的方法增强后再返回,代码来看就是另一种就是忽略掉了
enhancer,直接创建store在创建完
store后,内部会dispatch一个type: ActionTypes.INIT的action,因为我们的reducer不会有这个type的,所以会返回初始值,这一步就是给整个state tree赋初始值了通常,我们都不会只有一个
reducer,所以需要使用redux提供的合并reducer的函数combineReducerscombineReducers
combineReducers的原理就是依次调用传入对象的值的reducer函数简单来理解伪代码可以是这样
applyMiddleware
applyMiddleware是redux自带的增强器,主要是用来增强dispatch函数的功能,也就是提供了dispatch函数的中间件之前有讲,如果传入了
enhancer,会将createStore交给增强器来办,比如使用的applyMiddleware,流程大概就是这样接下来就直接铺上源码
源码分析
以下
tsc转出的JavaScript版,并且我人为的省略掉了一些类型判断和抛出错误本文详细代码见我的github仓库
createStore
combineReducers
combineReducers的作用就是将多个reducer合并为一个bindActionCreators
bindActionCreators的作用是简化操作,可以把dispatch包装进我们的action creator函数compose
compose函数是中间件applyMiddleware的核心功能,能将多个单参数函数从右到左嵌套调用它的调用形式如下
源码如下
applyMiddleware
applyMiddleware是redux自带的增强器,用来增强dispatch功能阅读完源码后,我最大的感慨还是
redux的闭包运用,基本处处都是闭包其中觉得最精妙的部分是
applyMiddleware,感觉好像很多地方都能用上这个概念Beta Was this translation helpful? Give feedback.
All reactions