2016-12-14 61 views
2

我正在阅读applyMiddleware的源代码,并在一些分页中,他们称这种方式为applyMiddleware(...middleware)。那么next参数何时通过?applyMiddleware()中的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 
     }; 
    }; 
} 
+0

你有读过[**'applyMiddleware' **](http://redux.js.org/docs/api/applyMiddleware.html)文档吗? –

回答

0

每个middlewaremiddlewares具有常规格式:

// 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行内存,并且嵌套和可组合性使得中间件系统功能强大。

相关问题