Redux-Thunk 中间件
Redux-Thunk中间件主要是用来进行异步触发dispatch,比如我们常见的Ajax需要在网络请求返回后进行dispatch
示例代码中我们使用了Fetch这个Ajax工具
1 | //Action |
可以看到,如果我们想在ajax返回的回调函数里进行return,是没办法对Action进行Retrun的,如果写在外部,又会在Ajax还未执行完毕被顺序执行
Action Creator
所以我们需要引入Redux的Action Creator的概念,既是返回值为Action的函数,例如使用前dispatch内部为一个包含有type的Action 对象
1 | /* 使用前 */ |
如果我们写一个changeName函数用来生成对象,那么changeName就是Action Creator
1 | const changeName = (name)=>({ |
Thunk 的原理
1 | // 1+2 会在代码执行时马上被运算 |
Thunk Action
Redux官网说,action就是Plain JavaScript Object。Thunk允许action creator返回一个函数
所以说Thunk就是通过中间件改造了Redux的Action Creator,进行延迟发送Dispatch,这个Creator其可以将dispatch和Store的getState作为参数引入,从而达到异步调用
1 | //Action |
Action和 Thunk Action的区别
Action和 Action Creator的区别主要是返回值不同,以及能否接触到Store的dispatch方法
| 方法 | 返回值 | 参数 |
| :————- | :————- |
| Action | 一个包含有type的Object | 和dispatch是独立的,无法互相接触 |
| Thunk Action| 返回值为一个入参为dispatch的函数 | 可以通过返回的函数异步进行dispatch,并且可以在action中获取到Store里的state |
也就是说Action Creator返回值是 函数 而不是Object
1 | //Action Creator |
配置Redux-Thunk
使用Redux-Thunk需要在中间件中配置
1 | import thunk from "redux-thunk"; // redux-thunk 支持 dispatch function,并且可以异步调用它 |