我们的 applyMiddleware 中,把 [A, B, C] 转换成 A(B(C(next))),是这样实现的

    1. const chain = [A, B, C];
    2. let dispatch = store.dispatch;
    3. chain.reverse().map(middleware => {
    4. dispatch = middleware(dispatch);
    5. });

    redux 提供了一个 compose 方式,可以帮我们做这个事情

    1. const chain = [A, B, C];
    2. dispatch = compose(...chain)(store.dispatch)

    看下他是如何实现的

    1. export default function compose(...funcs) {
    2. if (funcs.length === 1) {
    3. return funcs[0]
    4. }
    5. return funcs.reduce((a, b) => (...args) => a(b(...args)))
    6. }

    当然 compose 函数对于新人来说可能比较难理解,你只需要他是做什么的就行啦!