我们的 applyMiddleware 中,把 [A, B, C] 转换成 A(B(C(next))),是这样实现的
const chain = [A, B, C];let dispatch = store.dispatch;chain.reverse().map(middleware => {dispatch = middleware(dispatch);});
redux 提供了一个 compose 方式,可以帮我们做这个事情
const chain = [A, B, C];dispatch = compose(...chain)(store.dispatch)
看下他是如何实现的
export default function compose(...funcs) {if (funcs.length === 1) {return funcs[0]}return funcs.reduce((a, b) => (...args) => a(b(...args)))}
当然 compose 函数对于新人来说可能比较难理解,你只需要他是做什么的就行啦!
