我正在阅读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
};
};
}
答案 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行,嵌套和可组合性是什么使得 中间件系统功能强大。