最近在读Redux相关源码,现将自己实现的代码和理解贴上,后期再补充详细~
redux-thunk用于副作用处理。
thunk允许action是一个带有副作用的函数,当action是一个函数被分发时,thunk会阻止action继续向后移交。
thunk会向函数中传递三个参数:
- dispatch:来自于store.dispatch
- getState:来自于store.getState
- extra:来自于用户设置的额外参数
redux-thunk的原理很简单,接收的action参数类型是函数就执行,不是函数则将其视为一个aciton,并移交给后面的中间件:
function createThunkMiddleware(extra) {
return store => next => action => {
if (typeof action === 'function') {
return action(store.dispatch, store.getState, extra)
}
return next(action);
}
}
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
redux-thunk会将结果返回,所以我们可以用一个变量来接收。