下面是Redux里compose方法源码:
export default function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
const last = funcs[funcs.length - 1]
const rest = funcs.slice(0, -1)
return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args))
}
希望能得到各位详细的解析,谢谢
我恰好看过redux源码,顺手答了,redux要结合redux-thunk 和 applyMiddleWare看。
这个货需要结合redux-thunk看
redux-thunk经过middleWare(middleWareApi)后返回的是const a = next => action => { return next(action) }
假设还有其他中间件, 其他中间件的函数也是 const b = next => action => next(action)
你自己算一算 b(a) 的效果就是compose的效果。
第一个中间件的next是store.dispatch, 第二个的next是第一个函数返回的结果作为next,中间间中的dispatch是中间间都执行完毕后的 action => next(action)。
compose函数是有一点抽象,你可以自己写一个中间件试一试来理解