说说对redux中间件的理解
# 是什么
介于发出action后,dispatch之前的一个函数
# 怎么用
# redux-thunk
- 异步处理
- 给函数传入dispatch,getstate
function patchThunk(store) {
let next = store.dispatch;
function dispatchAndThunk(action) {
if (typeof action === "function") {
action(store.dispatch, store.getState);
} else {
next(action);
}
}
store.dispatch = dispatchAndThunk;
}
# redux-logger
- 日志中间件
let next = store.dispatch;
function dispatchAndLog(action) {
console.log("dispatching:", addAction(10));
next(addAction(5));
console.log("新的state:", store.getState());
}
store.dispatch = dispatchAndLog;
# 原理
- 所有中间件被放进一个数组chain中,然后嵌套执行,最后执行store.dispatch
- 把state和dispatch传入函数参数
export default function applyMiddleware(...middlewares) {
return (createStore) => (reducer, preloadedState, enhancer) => {
var store = createStore(reducer, preloadedState, enhancer);
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}
}
}
# FAQ
上次更新: 2021/12/19, 18:05:42