/**
* Composes single-argument functions from right to left. The rightmost
* function can take multiple arguments as it provides the signature for
* the resulting composite function.
*
* @param {...Function} funcs The functions to compose.
* @returns {Function} A function obtained by composing the argument functions
* from right to left. For example, compose(f, g, h) is identical to doing
* (...args) => f(g(h(...args))).
*/
export default function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
写给自己看的React-Redux源码实现
前言
汇总整理下react-redux的实现原理,常看常新
react-redux
Provider
import {Provider} from 'react-redux';
实现原理是 context,注意这里使用的是旧版的Context实现。在React v16.3之后提供一种全新的Context API。
connect
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
[mergeProps(stateProps, dispatchProps, ownProps): props] (Function):
如果指定了这个参数,mapStateToProps() 与 mapDispatchToProps() 的执行结果和组件自身的 props 将传入到这个回调函数中。该回调函数返回的对象将作为 props 传递到被包装的组件中。如果你省略这个参数,默认情况下返回 Object.assign({}, ownProps, stateProps, dispatchProps) 的结果。
redux
createStore
其实还有一个比较少用的replaceReducer。
createStore(reducer, [preloadedState], enhancer)官方版实现
简易版实现
compose
applyMiddleware及中间件
中间件的顺序是从左到右 applyMiddleware(...middlewares)官方版实现
Redux的中间件本质上就是增强dispatch,中间件要满足两个特性:一是扩展功能,二是可以被链式调用。
参考文献
Redux介绍 Redux 中文文档 盘点 React 16.0 ~ 16.5 主要更新及其应用