Redux源码分析:
- Redux源码分析--Middleware(1)
- Redux源码分析--Middleware(2)
- Redux源码分析--Enhancer
- Redux源码分析--createStore(dispatch、getState)
- Redux源码分析--CreateStore(subscribe)
- Redux源码分析--compose
compose作用:将多个函数组合成一个函数,比如compose(f,g,h),组合成一个f(g(h(...args)))
注:compose传入的函数参数,只有最右边的函数,可以传入多个参数
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)))
}
compose内部实现:
- 当compose没有传入参数时,返回args => args
- 当compose传入参数个数为1时,返回传入的参数
- 当compose传入参数个数大于1时,返回类似a(b(c(...args)))
compose在Redux源码中主要作用于enhancer、middleware(redux exports的applyMiddleware方法)
compose.js代码中,主要难点是reduce,下面将介绍下reduce方法
reduce用法:
funcs.reduce((a, b) => {}, initV)
- initV如果存在,则将initV作为a,funcs的一个参数为b,将执行的结果作为下一次执行时第一个参数,另外一个从funcs中获取
- initV如果不存在,则将funcs的第一个参数为a,funcs的第二个参数为b,将执行的结果作为下一次执行时第一个参数,另外一个从funcs中获取
比如:[1, 2, 3, 4].reduce((a, b) => a+b) 结果是 10,过程就是1+2+3+4