Redux-实现redux-thunk

138 阅读1分钟

最近在读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会将结果返回,所以我们可以用一个变量来接收。