Redux 中 reducer 调用外部 API 的正确方法

在 Redux 中,reducer 通常用来处理 action 的状态变更,它的主要职责是返回新的状态。但是有时候我们可能需要从外部 API 获取数据来更新状态,这时候我们就需要在 reducer 中调用外部 API。但是如果不小心处理不当,这种做法可能会影响应用的性能和可维护性。

在本文中,我们将探讨如何在 Redux 中正确地调用外部 API,并提供一些例子来说明这种做法。

为什么在 reducer 中调用外部 API 不是一个好主意

在 Redux 中 reducer 的职责非常明确,它只需要根据传入的 action 返回一个新的状态。它并不应该处理异步操作,比如调用外部 API。为什么呢?

  1. 性能问题:因为在 reducer 中调用外部 API 是一个异步操作,如果我们在 reducer 中处理异步操作,它可能会被多次调用。如果我们每次调用 reducer 都要执行一遍外部 API,那么它会很消耗性能。

  2. 可维护性问题:如果我们把异步操作放在 reducer 中,那么我们的 reducer 可能会变得很难维护。我们可能需要在 reducer 中处理很多不同的异步操作,这样我们的代码就会变得非常混乱。此外,在 reducer 中处理异步操作还会使测试变得更加困难。

如何在 reducer 中调用外部 API

虽然在 reducer 中调用外部 API 通常不是一个好主意,但有些情况下,我们必须这样做。例如,当数据从外部 API 更新时,我们可能需要在 reducer 中进行操作。在这种情况下,我们可以尝试以下两种方法:

1. 使用 Redux Thunk

Redux Thunk 是一个中间件,它允许我们在 action 中使用函数而不是对象。我们可以在 action 中创建一个函数,这个函数可以在同步和异步情况下都有效。

下面是一个示例代码:

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

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

然后,我们可以在 reducer 中使用这个 action:

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

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

这里,我们使用了 createAsyncThunk 函数来定义一个异步 action。在初始状态下,loading 属性设置为 false。在 pending 阶段,我们将 loading 设置为 true。在 fulfilled 阶段,我们将 loading 设置为 false,再将 API 返回的数据存储到状态中。在 rejected 阶段,我们设置 loading 为 false。

2. 在 action 中调用外部 API

我们也可以选择在 action 中调用外部 API 而不是在 reducer 中。

下面是一个示例代码:

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

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

这里,我们定义了一个异步 action,用于获取用户数据。当 action 被调用时,它会调用外部 API 并发送 FETCH_USER_SUCCESSFETCH_USER_FAILURE action。

结论

在 Redux 中,将异步操作放在 reducer 中通常不是一个好主意,因为它会影响应用的性能和可维护性。相反,我们可以使用 Redux Thunk 或者在 action 中调用外部 API。这样,我们可以避免出现潜在的性能问题,并将代码变得更加易于维护。

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


猜你喜欢

  • Node.js 中的 Express 框架使用教程

    Express 是一款基于 Node.js 平台的开放源代码 Web 应用程序框架。它旨在提供一组强大的功能,使 Web 应用程序开发变得更加简单、更加有效率。本文将深入介绍在 Node.js 中使用...

    2 个月前
  • HTTP/2 协议的性能优化原理与实践

    前言 随着互联网的发展,Web 应用性能一直是一个备受关注的话题。而 HTTP 协议作为 Web 应用的基础,其性能优化也成为了重要的研究方向,其中 HTTP/2 协议作为最新的 HTTP 协议,具有...

    2 个月前
  • PWA 的部署、监控与调试

    PWA(Progressive Web App),中文名为渐进式 Web App,是一种旨在提供类似原生应用程序体验的 Web 应用程序。PWA 已经成为现代 Web 开发中的热门话题,因其具有离线缓...

    2 个月前
  • 在 Web Components 中使用 WebSocket 进行实时通信的最佳实践

    前言 随着 Web 技术的不断发展,越来越多的应用需要实时通信功能,而 WebSocket 是一种能够实现双向数据传输的通信协议。在 Web Components 中使用 WebSocket 进行实时...

    2 个月前
  • 如何提高无障碍性交互的可扩展性

    在今天的 web 应用程序和网站中,无障碍性交互 (Accessible Interactions) 有着越来越重要的作用,因为越来越多的用户因身体、视觉或听觉等原因无法使用常规的输入设备或接收常规的...

    2 个月前
  • Serverless 构建企业级在线视频系统

    现在越来越多的企业需要在线视频系统来展示他们的产品和服务,给客户提供更好的体验。Serverless 能够帮助开发者快速创建出具有强大性能、可扩展性和可靠性的在线视频系统。

    2 个月前
  • Tailwind CSS 2.0:新型排版工具的使用介绍

    背景 作为一名前端开发者,我们需要规范且高效的 CSS 样式表来组织我们的应用程序。然而,传统的CSS编写方式使我们很容易陷入样式冲突和实现效率低下的境地。Tailwind CSS 2.0 是一个新型...

    2 个月前
  • Node.js 与 Redis 的结合使用详解

    Node.js 和 Redis 是前端开发领域中非常流行的两个工具,它们分别用于处理服务器端的 JavaScript 和内存数据存储。结合使用 Node.js 和 Redis 可以为开发人员带来很多好...

    2 个月前
  • 解决 Headless CMS 在数据同步上的冲突问题

    Headless CMS 是一种流行的内容管理系统,它提供了一种解耦前后端的方式,使得前端开发人员可以更灵活地使用 CMS 提供的数据。但是,在实际应用中,数据同步可能会引起冲突问题。

    2 个月前
  • 如何提高 Redux 应用的性能和效率

    Redux 是一个流行的 JavaScript 应用程序状态管理库,它可以帮助开发人员管理和更新应用程序中的数据。在开发大型应用程序时,Redux 可以提高代码的组织性、可维护性和可扩展性。

    2 个月前
  • 使用 Mocha + Protractor 测试 Angular.js

    随着 Web 技术的发展,前端开发变得越来越重要,对于大型 Web 应用来说,测试变得尤为重要。Mocha 和 Protractor 是两个流行的前端测试工具,可以用来测试 Angular.js 应用...

    2 个月前
  • 使用 Hapi 和 Vue.js 构建单页面应用程序

    随着互联网的普及,Web 应用程序的开发越来越成为互联网开发的重要组成部分。在 Web 应用程序的开发中,前端开发技术起到了极其重要的作用。而在当今的前端技术领域,Hapi 和 Vue.js 渐渐成为...

    2 个月前
  • 如何使用 ESLint 和 VS Code 在 JavaScript 应用程序中提高开发体验

    介绍 在 JavaScript 应用程序中,代码的一致性和规范性越来越受到重视。为了保持代码的质量和可读性,开发者需要使用一些代码检查工具来确保代码符合规范和最佳实践。

    2 个月前
  • ES6 的类的扩展方法解析

    随着 JavaScript 的快速发展,ES6 (ECMAScript 2015) 成为了一个令人激动的版本。其中,类的扩展方法便是其中的重要特性之一。在本文中,我们将深入探讨 ES6 的类的扩展方法...

    2 个月前
  • ES7、TypeScript 和 Flow:哪个更好?

    ES7、TypeScript 和 Flow:哪个更好? 在前端开发中,我们通常需要面对大量的 JavaScript 代码,其中可能存在许多潜在的问题。为了解决这些问题,ES7、TypeScript 和...

    2 个月前
  • 聊聊 Serverless 架构图形化实现

    Serverless 架构近年来越来越受到前端开发者的关注,它让开发者更加便捷地部署应用,节省了服务器维护的时间和成本。但是,对于初学者来说,使用 Serverless 还有一定的难度,特别是在架构设...

    2 个月前
  • ECMAScript 2019(ES10)中的新功能

    ECMAScript(简称 ES)是 JavaScript 的标准化规范,每一年都会发布新版标准,其中包含了一些新的特性和语法。ECMAScript 2019(ES10)在之前的版本基础上添加了一些新...

    2 个月前
  • 如何处理 React 项目中的异步请求

    React 是一个非常流行的前端框架,但在处理异步请求时,开发人员可能会面临各种挑战。本文将深入探讨如何处理 React 项目中的异步请求,具体涉及到 React 的状态管理,钩子函数,异步操作等知识...

    2 个月前
  • Material Design 中实现圆角的 SearchBar 教程分享

    搜索栏(SearchBar) 是一个常见的界面组件,广泛应用于各种应用程序和网站中。在 Material Design 中,搜索栏通常是带有圆角的形状。这篇文章将介绍如何使用 CSS 和 HTML 实...

    2 个月前
  • 如何在 Kubernetes 部署 MongoDB 副本集

    什么是 MongoDB 副本集 MongoDB 副本集是 MongoDB 高可用性架构的基础。它通过在多个服务器(节点)上复制数据来提高可用性和灵活性。在副本集中,只有一个节点是主节点,所有写入都发生...

    2 个月前

相关推荐

    暂无文章