redux-组合函数(compose)理解
详解
redux 提供了 applyMiddleware 这个 api 来加载 middleware,两者联系如下:
组合的中中间件函数如下:
function thunk({ dispatch, getState }) {
return next => action =>
typeof action === 'function' ?
action(dispatch, getState) :
next(action)
}
compose函数如下:
function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
return funcs.reduce((a, b) => (...args) => a(b(...args)))
// reduce() 方法对累加器和数组中的每个元素 (从左到右)应用一个函数
}
中间件处理返回新的dispatch
chain = middlewares.map(middleware => middleware(middlewareAPI))
dispatch = compose(...chain)(store.dispatch)
// 每次更新next,最后返回一个新的dispatch