目录
为了解析中间件,先看一下几个中间件是什么样子,怎么用,运行起来的原理是什么?
1、中间件是什么样子的
1.2 thunk中间件
function createThunkMiddleware(extraArgument) {
return ({ dispatch, getState }) => next => action => {
// 如果是函数,就执行函数
if (typeof action === 'function') {
return action(dispatch, getState, extraArgument);
}
// 如果不是,执行下一个中间件
return next(action);
};
}
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
1.2promise中间件
import isPromise from 'is-promise';
import { isFSA } from 'flux-standard-action';
export default function promiseMiddleware({ dispatch }) {
return next => action => {
if (!isFSA(action)) {
return isPromise(action) ? action.then(dispatch) : next(action);
}
return isPromise(action.payload)
? action.payload
.then(result => dispatch({ ...action, payload: result }))
.catch(error => {
dispatch({ ...action, payload: error, error: true });
return Promise.reject(error);
})
: next(action);
};
}
1.3logger中间件
const defaultLogger = ({ dispatch, getState } = {}) => {
if (typeof dispatch === 'function' || typeof getState === 'function') {
return createLogger()({ dispatch, getState });
}
};
function createLogger(options = {}) {
const loggerOptions = Object.assign({}, defaults, options);
const {
logger,
stateTransformer,
error