异步action是指它的值为一个函数,同步action是指它的值是一个对象
1.引入redux-thunk
yarn add redux-thunk
引入中间件,并且将中间件作为createStore的第二个参数传入,这里的第二个参数中间件是一个函数,可以传入一个参数为引入的thunk
//该文件用于暴露store对象
//引入createStore,专门用于创建redux中最核心的store对象
//引入applyMiddleware中间件
import {createStore,applyMiddleware} from 'redux'
//引入为count组件服务的reducer
import countReducer from './count_reducers'
//引入react-thunk,用于支持异步action
import thunk from 'redux-thunk'
//store中需要一个为之服务的reducer,因此将引入的reducer当参数传入这个创建的store中
//并且将这个store对象暴露出去
export default createStore(countReducer,applyMiddleware(thunk))
2.异步处理action.js
在action中进行异步操作,返回一个函数,作为异步处理方案
//分别封装两个action函数用来创建action对象
import {
INCREMENT,
DECREMENT
} from './constant'
import store from './store'
export const createIncrement = data => ({
type: INCREMENT,
data
})
export const createDecrement = data => ({
type: DECREMENT,
data
})
//异步的action就是指action返回的是一个函数,并且该函数的返回值是一个同步的action
//异步的action就是指action返回的是一个函数,并且该函数的返回值是一个同步的action
export const createAsyncIncrement = (data, time) => {
return (dispatch) => {
setTimeout(() => {
dispatch(createIncrement(data))
}, time);
}
}
3.使用触发action
asyncIcrement=()=>{
let {value}=this.selectNumber
store.dispatch(createAsyncIncrement(value*1,500))
}