Redux中异步action与同步action的使用

 更新时间:2022年07月29日 09:25:57   作者:codeMak1r.小新  
本文主要介绍了Redux中异步action与同步action的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

异步action

  • action:Object{} => 同步action
  • action:function() => 异步action
 同步action异步action
类型Object类型的对象function()函数
dispatch(action)同步的action被dispatch到store后;
store直接将其交给reducer加工。
异步的action函数被dispatch到store后;
store会先调用这个函数,等待异步任务结束。
   

在这里插入图片描述

store监测到传入的action是一个一般对象,那么store就知道这是一个同步的action,store就会把这个action交给Reducers去加工,执行。

但是store若监测到传入的action是一个函数,那么store就知道这是一个异步的action,store就会配合中间件,先调用这个函数。等到函数内的异步任务结束,再调用函数内部的同步的dispatch,再交给Reducers去加工状态。同时,store调用这个包裹着异步任务的函数时,会传入一个dispatch方法作为函数的参数,以供函数内部异步任务结束时使用这个同步的dispatch。

中间件(Middleware):redux-thunk

安装中间件:

npm install redux-thunk
// 或
yarn add redux-thunk

引入中间件:

既然中间件是配合store使用的,那么当然是在store中引入并使用这个中间件

store.js:

/* 
  该文件专门用于暴露一个store对象,整个应用只有一个store对象
*/
// 引入createStore,专门用于创建redux中最为核心的store对象
import { legacy_createStore as 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))

代码解释:

applyMiddleware是redux中用于执行中间件的函数;

引入redux-thunk中间件;

在creaetStore时,将applyMiddleware传入作为createStore的第二个参数;

applyMiddleware本身是一个函数,用于执行中间件,所以要把(thunk)传入applyMiddleware这个函数。

applyMiddleware(thunk)含义是:执行thunk这个中间件。

这样一来,store就会在接收到一个函数类型的action时,去调用这个action对应的函数。

并且,异步action中一般都会调用同步的action,所以store在调用这个异步action对应的函数时,会传入dispatch方法作为参数,以供异步任务结束后,使用这个dispatch方法调用同步的action。

count_action_creator.js:

/* 
  该文件专门为Count组件生成action动作对象
*/
import { INCREMENT, DECREMENT } from './constant'
// 同步action,就是指action的值为Object对象
export const createIncrementAction = data => ({ type: INCREMENT, data })
// ({ type: 'increment', data }) 相当于 { return { type: 'increment', data } }
export const createDecrementAction = data => ({ type: DECREMENT, data })

// 异步action,就是指action的值是函数
export const createIncrementAsyncAction = (data, time) => {
  return (dispatch) => {
    setTimeout(() => {
      dispatch(createIncrementAction(data))
    }, time)
  }
}

在Count组件中调用这个函数:

incrementAsync = () => {
  const { value } = this.selectedNumber
  store.dispatch(createIncrementAsyncAction(value * 1, 500))
}

异步action总结:

延迟的动作不想交给组件自身,想交给action时,可以使用异步的action
(但异步action并不是必须的);

何时需要异步action:
想对状态进行操作,但是具体的数据靠异步任务返回;

具体编码:

npm install redux-thunk

yarn add redux-thunk安装中间件

创建action的函数不再返回一个一般对象,而是返回一个函数,该函数中写异步任务;

异步任务有结果后,使用store传入的dispatch参数分发一个同步的action去真正操作数据

备注:异步action不是必须要写的,完全可以自己在组件中等待异步任务的结果之后再去分发同步action。

 到此这篇关于Redux中异步action与同步action的使用的文章就介绍到这了,更多相关Redux 异步action与同步action内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何在React中有效地监听键盘事件

    详解如何在React中有效地监听键盘事件

    React是一种流行的JavaScript库,用于构建用户界面,它提供了一种简单而灵活的方式来创建交互式的Web应用程序,在React中,我们经常需要监听用户的键盘事件,以便根据用户的输入做出相应的反应,本文将向您介绍如何在React中有效地监听键盘事件,并展示一些常见的应用场景
    2023-11-11
  • 详解React路由传参方法汇总记录

    详解React路由传参方法汇总记录

    这篇文章主要介绍了详解React路由传参方法汇总记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • React useEffect不支持async function示例分析

    React useEffect不支持async function示例分析

    这篇文章主要为大家介绍了React useEffect不支持async function示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • React组件实例三大属性state props refs使用详解

    React组件实例三大属性state props refs使用详解

    这篇文章主要为大家介绍了React组件实例三大属性state props refs使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • React中的Diff算法你了解吗

    React中的Diff算法你了解吗

    这篇文章主要为大家详细介绍了React的Diff算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • React动态更改html标签的实现方式

    React动态更改html标签的实现方式

    这篇文章主要介绍了React动态更改html标签的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • React新文档切记不要滥用Ref

    React新文档切记不要滥用Ref

    这篇文章主要为大家介绍了React新文档滥用Ref出现的问题详解,以及如何正确的使用Ref,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-07-07
  • React文件名和目录规范最佳实践记录(总结篇)

    React文件名和目录规范最佳实践记录(总结篇)

    React在使用时非常灵活,如果没有一个规范约束项目,在开发过程中会非常混乱,本文将介绍几个优秀的规范,介绍文件名和目录前,需要先简述一下几种通用的类型,用来区分文件的功能,感兴趣的朋友一起看看吧
    2022-05-05
  • react-router-domV6嵌套路由实现详解

    react-router-domV6嵌套路由实现详解

    这篇文章主要为大家介绍了react-router-domV6嵌套路由实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • React + Typescript领域初学者的常见问题和技巧(最新)

    React + Typescript领域初学者的常见问题和技巧(最新)

    这篇文章主要介绍了React + Typescript领域初学者的常见问题和技巧,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论