前言

redux 的核心概念很简单:将需要修改的 state 都储存在 store 里,发起一个 action 用来描述发生了什么,用 reducers 描述 action 如何改变 state tree,创建 store 的时候需要传入 reducer,真正能改变 store 中数据的是 API store.dispatch。
纯粹使用 redux 时,我们需要 dispatch 的是一个 action 对象。当我们使用 redux-thunk 后,我们 dispatch 的是一个 function,redux-thunk 中间件会自动调用这个 function,并且传递 dispatch 方法作为其第一个参数,于是我们就能在这个 function 内根据我们的请求状态:开始,请求中,请求成功/失败,dispatch 我们期望的任何 action 了,这也是为什么它能支持异步 dispatch action,自然的请求的逻辑就需要放到这里面调用了。换言之,redux-thunk 改写了 dispatch API,使其具备接受一个函数作为参数的能力,从而达到 middleware 的效果,即在 redux 的 dispatch action => reducer => store 这个流程中,在 action 被发起之后,到达 reducer 之前的扩展点,加入相关操作,比如发生请求、log信息等。一句话:redux-thunk 就是对 store.dispatch() 的增强。