Redux 的异步等待和处理方法

Redux 是一个流行的 JavaScript 应用程序状态管理库,它被广泛应用于前端领域。它提供通用的状态容器,可以让我们轻松管理应用程序的状态。在实际开发中,异步操作是非常常见的,例如从服务器获取数据、异步调用 API 等。在 Redux 中如何处理异步操作?

Redux 中的异步处理

Redux的设计理念是所有的state变更皆由纯函数reducer处理,因此Redux并没有内置异步处理能力,它只能通过 middleware 来处理异步操作。Redux官方提供了一个官方中间件——redux-thunkredux-saga等等,其中redux-thunk是其中最简单的一个,同时它也大多数情况下能够满足我们的需求。

Redux Thunk

Thunk有好几种定义,一种最流行、最约定俗成的是它是一个能够延迟计算的表达式。具体而言,它是一个函数,用来封装一个计算任务,可以在需要时再进行计算。Redux Thunk利用到了这个特性,它提供了一种让action创建器真正做点异步操作的方式——在action创建器中返回一个函数,而不是普通action对象。

安装

使用npm安装redux-thunk:

--- ------- ------ -----------

使用

在使用 createStore 创建 Redux Store 的时候,通过 applyMiddleware 把 redux-thunk 加入到 Middleware 中。

------ - ------------ --------------- - ---- --------
------ ----- ---- --------------
------ ----------- ---- -------------

----- ----- - ------------
  ------------
  ----------------------
--

示例

假如我们要实现一个异步增加计数器的功能,我们需要做如下的步骤:

  1. 定义增加计数器的 action 类型和函数
-- -- ------------
------ ----- --------- - ------------

-- -- ----------
------ - --------- - ---- --------------

------ ----- -------- - -- -- --
  ----- ----------
---
  1. 创建 action 创建函数

在 action 创建函数中进行异步操作,最终通过 dispatch 分发 action

-- -- -----------------
------ - -------- - ---- ------------

------ ----- ------------- - -- -- -
  ------ -------- -- -
    ------------- -- -
      ---------------------
    -- ------
  --
--
  1. 整合 action
-- ------------
------ - --------- - ---- ---------------

----- ------------ - -
  ------ --
--

----- ------- - ------ - ------------- ------- -- -
  ------ ------------- -
    ---- ----------
      ------ -
        ------ ----------- - --
      --
    --------
      ------ ------
  -
--

------ ------- --------
  1. 在组件中调用 action 创建函数

在组件中,我们通过 React-redux 提供的 connect 函数连接 Redux Store,从而可以在 props 上获取到 dispatch。然后再通过 dispatch 触发 action。

-- -- ------
------ ----- ---- --------
------ - ------- - ---- --------------
------ - ------------- - ---- -------------------------

----- --- - -- ------ ------------- -- -- -
  -----
    ---------- ------------
    ------- -----------------------------------------
  ------
--

----- --------------- - ----- -- --
  ------ ------------
---

------ ------- ------------------------ - ------------- --------

上面的代码中,当点击按钮时,我们调用 addCountAsync 方法,该方法返回了一个函数,这个函数最终需要通过 dispatch 触发 ADD_COUNT action。

最后,我们的 app 功能正常,当点击按钮一秒后,计数器会自动 +1。

总结

本文介绍了 Redux 中的异步等待和处理方法,重点介绍了 redux-thunk 中间件的原理和使用方法。Redux 中的异步操作需要用 middleware 来处理,在中间件内写异步操作,最终通过 actionCreator 返回普通对象 action 或者函数来实现异步操作。redux-thunk 让我们可以非常方便地实现异步操作,它灵活易用、应用场景广,对于大多数前端开发者而言,它是一个不错的选择。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/654af41b7d4982a6eb4e8f38


猜你喜欢

  • Vue.js 实现手写字体识别的技巧

    Vue.js 是一个非常流行的前端框架,它可以让开发者快速构建交互式的 Web 应用程序。越来越多的人开始使用 Vue.js 来开发手写字体识别应用程序。本文将介绍如何使用 Vue.js 实现手写字体...

    1 年前
  • 在 ES6 中使用新的基本数据类型 BigInt

    ES6 引入了一个新的基本数据类型 BigInt,用来处理大数字操作。在 JavaScript 中,数字被存储为 64 位双精度浮点数,这会导致一些数字在进行大数字操作时会失去精度,使用 BigInt...

    1 年前
  • Webpack 的 tapable 插件架构解析

    Webpack 是一个非常重要的前端工具,它的主要作用是将多个模块打包成一个文件,以便于浏览器加载使用。在 Webpack 核心中,最重要的组件之一就是 tapable 插件架构。

    1 年前
  • ECMAScript 2021:前端开发中的跨域解决方案

    在前端开发中,经常需要访问跨域资源,例如从一个域名下的网页向另一个域名下的 API 发起请求。然而由于浏览器的同源策略,跨域访问是被禁止的,因此我们需要一些解决方案来解决这个问题。

    1 年前
  • 基于 Apache Cassandra 的性能优化

    Apache Cassandra 是一种分布式 NoSQL 数据库,它是一个高性能和可扩展的存储系统。它可以轻松地处理数百万行的数据,并提供可靠的数据存储和快速的读写操作。

    1 年前
  • ES8 中 Object.values()、Object.entries() 方法详解

    在 ES8 中,JavaScript 引入了 Object.values() 和 Object.entries() 方法,用于获取对象的值和键值对数组。这两个方法大大简化了对象的遍历和检索,让前端开发...

    1 年前
  • Flexbox 实现响应式三行文本溢出省略号

    当我们在设计网页布局时,有时候需要在一个容器内显示一些长度不固定的文本内容。但是,当文本过长时,容器的高度会被撑高,导致整体布局变得很不美观。这时候,我们需要实现文本溢出省略号的功能,让页面更加美观。

    1 年前
  • MongoDB 使用备份工具及备份恢复过程详解

    在互联网时代,每天产生的数据量都是十分庞大的,因此备份和恢复数据库就成为了每家企业必须面对的问题。MongoDB 作为一种非关系型数据库,备份和恢复 MongoDB 数据库同样是必不可少的任务。

    1 年前
  • 实现日志切割的 Node.js 应用实践

    在 Node.js 应用中,日志文件的记录是非常重要的。但是,随着时间的推移,日志文件会越来越大,导致难以处理,也会影响服务器的性能。为了解决这个问题,我们需要实现一个日志切割的功能。

    1 年前
  • ESLint 使用总结:避免四大问题

    什么是 ESLint? ESLint 是一个基于 JavaScript 的语法规则和代码风格检查工具。它可以通过定义一些规则来强制执行代码的风格,从而使代码更加可读且易于维护。

    1 年前
  • 如何解决 Vue.js SPA 项目搜索引擎优化问题

    随着前端框架的快速发展,越来越多的网站采用了 Vue.js 作为前端框架进行开发。Vue.js 简单易用、组件化编程和优秀的性能,常常被开发者视为首选。然而,在使用 Vue.js 进行单页应用程序开发...

    1 年前
  • Fastify 中如何使用 Proxy 转发请求

    在 Web 开发过程中,我们经常需要使用代理(Proxy)将 HTTP 请求转发到其他服务或是 API 上,以实现不同服务之间的数据交换或是资源共享。Fastify 是一个非常快速和轻量级的 Web ...

    1 年前
  • 优化 GraphQL 错误处理

    GraphQL 是一种现代化的 API 技术,能够提升 API 的灵活性、可用性和可扩展性。GraphQL 不仅能够帮助开发者在一次 API 请求中获取到自己需要的数据,还能够优化前端与后端之间的数据...

    1 年前
  • Web Components 与 CSS:如何写出易维护的 UI 组件

    随着 Web 技术的不断发展,越来越多的前端开发人员发现,在开发复杂的 UI 组件时,使用传统的 HTML、CSS 和 JavaScript 已经无法满足需求。它们不仅过于冗余,而且易于出现样式冲突,...

    1 年前
  • TypeScript 中隐式转换与显式类型转换的区别与实际应用

    在 JavaScript 中,类型转换是非常常见的事情。但是由于 JavaScript 动态弱类型的特性,导致开发者经常会在类型转换中产生奇怪的行为。TypeScript 作为一门带有类型的 Java...

    1 年前
  • Material Design 中自定义控件的制作教程

    Material Design 是 Google 推出的一套设计规范,让移动端和 Web 端的设计更加统一、美观。随着移动互联网的普及,Material Design 已经成为前端开发中不可或缺的一部...

    1 年前
  • 如何在 Chai 中使用 sinon.spy() 进行函数调用跟踪

    在前端开发中,进行单元测试是非常重要的。而对于一些复杂的函数和模块,我们需要知道它们被调用了多少次,在什么情况下被调用,以及被传递了哪些参数。在这种情况下,sinon.spy() 可以帮助我们进行函数...

    1 年前
  • 如何在 Custom Elements 中进行状态管理

    Custom Elements 是一个 Web 组件标准,可以让开发者创建自定义 HTML 标签,带有自己的样式和行为。在这个标准中,开发者可以使用许多现代的 Web 开发技术,如 Shadow DO...

    1 年前
  • Cypress 自动化测试教程:如何使用输入框

    前言 Cypress 是一个现代化的 JavaScript 端到端测试框架,可以用来测试 Web 应用程序。它具有易用性、快速反馈、可靠性、可调试性等特点,因此越来越受到开发者的青睐。

    1 年前
  • Angular 2 和 RxJS:无穷滚动和分页

    在当前的 Web 应用程序开发中,无穷滚动和分页技术已经成为了非常流行的功能需求之一。这些功能的实现不仅能够使得我们的应用程序拥有更好的用户体验,同时也能够提高我们的应用程序的性能和响应速度。

    1 年前

相关推荐

    暂无文章