



在redux中派发的动作是纯对象({name:'xxx'}),不能是函数

koa模型

~~~
export default 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)))
}
~~~

~~~
import compose from './compose';
export default function applyMiddleware(...middlewares){
//middlewares=['thunk','logger']
return function(createStore){
return function(...args){
let store = createStore(...args);
let dispatch;
let middlewareAPI= {
getState:store.getState,//获取仓库中的状态
dispatch:(...args)=>dispatch(...args)//派发动作
};
const chain = middlewares.map(middleware=>middleware(middlewareAPI));
dispatch = compose(...chain)(store.dispatch);
return {
...store,
dispatch
};
}
}
}
~~~