Open 1993klk opened 4 years ago
redux库导出了createStore,combineReducers,bindActionCreators,applyMiddleware,compose,DO_NOT_USEActionTypes这几个成员。
in:reducer, preloadedState, enhancer out:{dispatch,subscribe,getState,replaceReducer,[$$observable]: observable} 内部存储了currentReducer,currentState,currentListeners,nextListeners,isDispatching这几个变量。
reducer就是redux概念上的reducer,接受preState和acticon,返回state preloadedState为预设的state,生成初始化state enhancer为使用applyMiddleware函数调用过后返回的函数,若存在enhancer,则会通过enhancer调用自身createStore,并返回store
dispatch:接受action,返回action。不能在reducers中调用dispatch。每次调用,会调用reducer,将当前的state和action传入,生成新的state并保存,将nextListeners赋值给currentListeners,之后遍历当前监听者队列并调用监听者。
subscribe:不能在reducer中执行subscribe,理论上是注册单个监听器使用的。每次注册监听器,都生成currentListeners的一份浅拷贝,将其赋值给nextListeners,将监听器推入nextListeners中,并返回取消监听的方法。一旦调用,生成currentListeners的一份浅拷贝,将其赋值给nextListeners,并将通过闭包保留的监听器对象从nextListeners中删除 getState:返回currentState变量 replaceReducer:接受reducer,替换当前reducer,并立即发起一次类型为ActionTypes.REPLACE的action observable:返回包含subscribe和$$observable函数成员的对象,subscribe用于一次性注册多个监听器的场景,通过此subscribe注册的多个监听器。$$observable调用返回observable
in: reducers 多个reducer组成的对象 out: reducer 转化为一个reducer函数 内部函数名称combination reducers是多个reducer组成的,combineReducers会将reducers中值不为函数的键值对剔除。对象,key对应最后生成的state的key,value是对应key的reducer函数。 调用combination会依次调用reducers里的函数并返回返回的state
in:actionCreators dispatch out:boundActionCreators actionCreators为多个actionCreator函数组成的对象,bindActionCreators会将actionCreators中值不为函数的键值对剔除,通过内部的bindActionCreator方法将会生成新的函数,该函数中会调用dispatch和actionCreator,故传入数据,调用同名action时就会发起一次dispatch。
in:middlewares out:enhancer 接受中间件,返回增强器 增强器分步接受createStore,preloadedState,enhancer,返回store对象。其中,中间件数组元素被调用,接受getState和包含错误处理的dispatch并返回函数列表,后通过compose将函数列表和store.dispatch进行组合,形成发起action后执行中间件的dispatch。
in:funcs out:func 实现原理是通过数组reduce方法将函数列表组合成一个函数,按照函数逆序,后一个函数的调用结果作为前一个函数的入参依次调用
包含INIT,REPLACE,PROBE_UNKNOWN_ACTION三个不能被使用的ActionTypes,用于redux发起特定的action。
Redux对象组成
redux库导出了createStore,combineReducers,bindActionCreators,applyMiddleware,compose,DO_NOT_USEActionTypes这几个成员。
1、createStore
in:reducer, preloadedState, enhancer out:{dispatch,subscribe,getState,replaceReducer,[$$observable]: observable} 内部存储了currentReducer,currentState,currentListeners,nextListeners,isDispatching这几个变量。
reducer就是redux概念上的reducer,接受preState和acticon,返回state preloadedState为预设的state,生成初始化state enhancer为使用applyMiddleware函数调用过后返回的函数,若存在enhancer,则会通过enhancer调用自身createStore,并返回store
dispatch:接受action,返回action。不能在reducers中调用dispatch。每次调用,会调用reducer,将当前的state和action传入,生成新的state并保存,将nextListeners赋值给currentListeners,之后遍历当前监听者队列并调用监听者。
subscribe:不能在reducer中执行subscribe,理论上是注册单个监听器使用的。每次注册监听器,都生成currentListeners的一份浅拷贝,将其赋值给nextListeners,将监听器推入nextListeners中,并返回取消监听的方法。一旦调用,生成currentListeners的一份浅拷贝,将其赋值给nextListeners,并将通过闭包保留的监听器对象从nextListeners中删除 getState:返回currentState变量 replaceReducer:接受reducer,替换当前reducer,并立即发起一次类型为ActionTypes.REPLACE的action observable:返回包含subscribe和$$observable函数成员的对象,subscribe用于一次性注册多个监听器的场景,通过此subscribe注册的多个监听器。$$observable调用返回observable
2、combineReducers
in: reducers 多个reducer组成的对象 out: reducer 转化为一个reducer函数 内部函数名称combination reducers是多个reducer组成的,combineReducers会将reducers中值不为函数的键值对剔除。对象,key对应最后生成的state的key,value是对应key的reducer函数。 调用combination会依次调用reducers里的函数并返回返回的state
3、bindActionCreators
in:actionCreators dispatch out:boundActionCreators actionCreators为多个actionCreator函数组成的对象,bindActionCreators会将actionCreators中值不为函数的键值对剔除,通过内部的bindActionCreator方法将会生成新的函数,该函数中会调用dispatch和actionCreator,故传入数据,调用同名action时就会发起一次dispatch。
4、applyMiddleware
in:middlewares out:enhancer 接受中间件,返回增强器 增强器分步接受createStore,preloadedState,enhancer,返回store对象。其中,中间件数组元素被调用,接受getState和包含错误处理的dispatch并返回函数列表,后通过compose将函数列表和store.dispatch进行组合,形成发起action后执行中间件的dispatch。
5、compose
in:funcs out:func 实现原理是通过数组reduce方法将函数列表组合成一个函数,按照函数逆序,后一个函数的调用结果作为前一个函数的入参依次调用
6、DO_NOT_USEActionTypes
包含INIT,REPLACE,PROBE_UNKNOWN_ACTION三个不能被使用的ActionTypes,用于redux发起特定的action。