之前写过一篇博客是关于redux-saga的使用,用于解决异步问题,这篇博客想要补充一下对redux异步的理解。
1,同步和异步的区别
1)同步action,就是指action的值为Object类型的一般对象
export const createIncrementAction = data => ({type:INCREMENT,data})
2)异步action,就是指action的值为函数,异步action中一般都会调用同步action。(异步action不是必须要用的)。
export const createIncrementAsyncAction = (data,time) => {
return ()=>{
……
}
}
因为action要执行异步操作后,才能派发指令,修改store。因为只有函数能够开启异步任务,所以异步,action的返回值是一个函数。
2,如何编写异步action,我相信和你所想的一样,就是异步操作执行完毕之后,分发一个同步的action去真正操作数据。
export const createIncrementAsyncAction = (data,time) => {
return (dispatch)=>{
setTimeout(()=>{
dispatch(createIncrementAction(data))
},time)
}
}
那么问题来了,报错
action必需是一个Object类型的一般对象,请使用中间件来实现异步action。
这就是中间件必需出马的原因。
3,下面介绍一个基本的中间件,redux-thunk
store.js文件,如下配置,即可。
//引入createStore,专门用于创建redux中最为核心的store对象
import {createStore,applyMiddleware} from 'redux'
//引入为Count组件服务的reducer
import countReducer from './count_reducer'
//引入redux-thunk,用于支持异步action
import thunk from 'redux-thunk'
//暴露store
export default createStore(countReducer,applyMiddleware(thunk))
备注:异步action不是必须要写的,完全可以自己等待异步任务的结果了再去分发同步action。