applyMiddleware()中的`next`是什么?

时间:2016-12-14 09:55:28

标签: redux react-redux

我正在阅读applyMiddleware的源代码,在某些代码段中,他们会这样称呼applyMiddleware(...middleware)。那么next参数何时通过?

export default function applyMiddleware(...middlewares) {
  return (next)  =>
     (reducer, initialState) => {
        var store = next(reducer, initialState);
        var dispatch = store.dispatch;
        var chain = [];

        var middlewareAPI = {
          getState: store.getState,
          dispatch: (action) => dispatch(action)
        };

        chain = middlewares.map(middleware => middleware(middlewareAPI));

        dispatch = compose(...chain, store.dispatch);
        return {
          ...store,
          dispatch
        };
   };
}

1 个答案:

答案 0 :(得分:0)

middleware中的每个middlewares都采用以下格式:

// condensed, does not do anything, just calls the next middleware
function middleware({ getState }) => (next) => (action) => next(action)

or

// expanded, does not do anything, just calls the next middleware
function middleware({ getState }) {
  return function (next) {
    return function (action) {
      return next(action)
    }
  }
}

中间件是一个函数,它返回一个函数,如果有的话,返回调用下一个中间件的函数。

要回答您的问题,next将作为参数传递给第二个函数。这样,applyMiddleware商店增强器可以调用链中的下一个中间件。中间件语法有点令人困惑(来自docs):

  

中间件听起来比实际复杂得多。唯一的   真正了解中间件的方法是看现有的如何   中间件工作,并尝试编写自己的。函数嵌套可以   实际上,你会发现大多数中间件都是令人生畏的   10行,嵌套和可组合性是什么使得   中间件系统功能强大。

相关问题