action分两类:
- 同步:指action的值是Object类型的一般对象
- 异步:指action的值是函数
本示例修改自 上一章 完整版Redux求和Demo
目前涉及异步的操作就是【延时加】功能,顾只修改相关代码
/**
* 该文件专门为Count组件生成action对象
*/
import { INCREMENT, DECREMENT } from './constant'
import store from './store'
// 同步action:指action的值是Object类型的一般对象
export const createIncrementAction = data => ({ type: INCREMENT, data })
export const createDecrementAction = data => ({ type: DECREMENT, data })
// 异步action:指action的值是函数
export const createIncrementAsyncAction = (data, time) => () => {
setTimeout(() => {
store.dispatch(createIncrementAction(data))
}, time)
}
只修改了引入新action和异步加方法
// 引入actionCreator,专门用于创建action对象
import {
createIncrementAction,
createDecrementAction,
createIncrementAsyncAction
} from '../../redux/count_action'
asyncAdd = () => {
const { num } = this.state
// setTimeout(() => {
// store.dispatch(createIncrementAction(num))
// }, 2000)
store.dispatch(createIncrementAsyncAction(num, 2000))
}
如果你有幸见到了下面的报错:
Actions must be plain objects
那么恭喜你,我要开始装杯了!!!
plain objects
(朴实无华?就是纯Object类型对象),这里返回的是function,store表示 who are u?yarn add redux-thunk
或 npm i redux-thunk
- 从 redux 引入 applyMiddleware
- 引入 redux-thunk
- 通过 applyMiddleware 添加中间件 thunk
/*
该文件专门用于暴露一个store对象,整个应用只有一个store对象
*/
// 引入createStore,专门用于创建redux中最为核心的store对象
// 引入applyMiddleware 执行中间件
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))
/**
* 该文件专门为Count组件生成action对象
*/
import { INCREMENT, DECREMENT } from './constant'
// 同步action:指action的值是Object类型的一般对象
export const createIncrementAction = data => ({ type: INCREMENT, data })
export const createDecrementAction = data => ({ type: DECREMENT, data })
// 异步action:指action的值是函数(不需要额外引入store了,人家直接把dispatch传给你了)
export const createIncrementAsyncAction = (data, time) => dispatch => {
setTimeout(() => {
dispatch(createIncrementAction(data))
}, time)
}
yarn add redux-thunk
或 npm i redux-thunk
,并配置在store中dispatch
,第2个参数是 getState