npm包redux-request-state使用教程

面试官:小伙子,你的数组去重方式惊艳到我了

简介

redux-request-state是一个可编程的redux中间件和React高阶组件,它可以使我们在React项目中更加容易地处理异步请求和请求状态。

redux-request-state拥有以下特点:

  • 简洁方便:内置请求状态管理、缓存、取消等功能,可以快速搭建一个可靠的异步请求系统。
  • 灵活可配置:可以自由配置请求参数、请求方式、请求头等,支持定制缓存存储策略和状态管理器。
  • 兼容性强:兼容React和Redux的所有版本,同时支持react-redux和redux-toolkit
  • 生态丰富:附带了详细的文档和示例,可以快速入门,并且有大量的拓展库可以实现更多高级特性。

安装和使用

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

import 并使用:

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

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

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

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

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

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

下面我们将详细介绍redux-request-state各个模块的具体使用方法。

模块详解

reducer

redux-request-state中间件启用后,相关的请求状态将会被存储在Redux的状态树中。需要在Redux中添加reducers:

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

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

actions

redux-request-state包含一些内置的action creator,用于更新请求状态。

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

------------------------------------
---------------------------------- -------
------------------------------- --------
----------------------------------
  • request(type: string, payload: any) 发起一个请求
  • success(type: string, payload: any) 请求成功返回
  • fail(type: string, payload: any) 请求失败
  • reset(type: string) 重置状态

useRequest

useRequest 是一个React hook,用于在组件中发起异步请求。

使用方法:

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

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

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

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

hook返回的对象具有以下属性:

  • data: 请求成功后的数据,等效于 getState().request[type].data
  • loading: 当前请求是否正在进行中,等效于 getState().request[type].loading
  • error: 请求失败的错误对象,等效于 getState().request[type].error
  • sendRequest: 发送异步请求的函数,该函数有以下参数:
-------------------------- ------- -------- ------- 

第一个参数称为 requestConfig。它应该是一个符合 axios 请求配置的对象。例如:

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

第二个参数称为 options。它是一个包含以下属性的对象:

  • sendOnMount: 默认为 false。如果设置为 true,则在组件挂载时自动发送请求。
  • cacheTime: 缓存失效时间(单位为秒)。默认为 0,不缓存,否则缓存响应结果 cacheTime 秒。比如,让缓存失效时间为20秒:
-- -----------------
------------- ------- ------ ---- -------- -- - ---------- -- ---

withRequest

redux-request-state还提供了一个高阶组件withRequest,它将数据、请求函数和请求状态作为props传递给目标组件。使用方式:

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

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

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

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

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

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

withRequest接收一个路径参数,通过路径参数来映射到redux中间件中的状态。

例如:

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

在这种情况下,成功请求时的响应数据将存储在 getState().request.users.data 中,loading状态会存储在 getState().request.users.loading

withStatus

withStatus 是另一个高阶组件,它将请求状态作为props传递给目标组件。

使用方式:

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

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

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

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

我们可以看到 Button 组件接收 loadingerror 作为props,以便根据状态禁用或启用按钮并显示错误消息。

配置选项

除了上述Hook和高阶组件外,redux-request-state还提供了许多配置选项,可以帮助我们实现更高级的特性。我们可以通过 configure 函数更改这些选项。例如:

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

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

示例

接下来我们将通过一个实际的示例来帮助更好地理解 redux-request-state 的使用方法。

在这个例子中,我们将访问 GitHub API,并使用 useRequestwithRequest 显示 Github 上的用户和他们的存储库。

先通过npm安装依赖包:

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

我们需要首先创建我们的API对象:

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

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

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

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

这个 API 将获取给定用户的存储库并获取所有 GitHub 用户。接下来是我们的 UserList 组件:

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

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

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

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

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

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

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

此组件向用户显示所有 GitHub 用户,用户将选择一个用户以获取其存储库。当用户选择一个选项时,我们将触发异步Action,第一个Action将设置我们的 loadingerror 状态,第二个Action获取数据,并将其填入状态树,组件中随后会自动重新渲染。

以下是我们的 RepositoriesTable 组件:

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

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

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

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

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

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

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

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

该组件根据当前用户显示存储库,并显示适当的适当消息和错误消息。

接下来让我们在我们的 App 组件中使用它们:

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

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

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

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

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

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

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

我们启动这个应用程序,并通过选择我们的用户来查看数据的变化。

这个例子帮助我们理解了 redux-request-state的基本使用方法和架构,仅仅包含了很多 从根元素到最后一级节点固有的状态管理和props传递的过程,让我们在React项目中更加容易地处理异步请求和请求状态。

总结

本文详细地介绍了 redux-request-state 实现的基本架构和用法,并包括完整的示例代码。相信读者通过本文的阅读,可以轻松通过 redux-request-state 实现在 React 项目中的异步请求与请求状态处理。如果读者希望深入了解更多有关 redux-request-state 的内容,可以参考它的github仓库并阅读相关文档,希望读者可以在实际项目中运用所学知识,提升开发效率。

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


猜你喜欢

  • 如何在 Hapi 中使用 Socket.io 实现实时通信

    Socket.io 是一个基于 Node.js 的实时通信框架,可方便地实现服务端和客户端之间的实时通信。而 Hapi 是一个基于 Node.js 的 Web 开发框架,它提供了一些有用的工具和插件,...

    1 小时前
  • 在 ES9 中使用 obj.constructor() 函数创建对象

    在 JavaScript 中,我们通常使用对象字面量或构造函数来创建对象。但在 ES9 中,我们可以使用 obj.constructor() 函数来创建对象。这种方式可以让我们更加灵活地创建对象,并且...

    1 小时前
  • 如何使用 Mocha 测试 AngularJS 应用?

    Mocha 是一个流行的 JavaScript 测试框架,可针对多种应用程序和库进行测试。在前端开发领域中,测试是至关重要的一环,特别是对于 AngularJS 应用程序。

    1 小时前
  • Next.js 处理外部请求数据的方法和技巧

    Next.js 是一种流行的 React 框架,可以帮助我们构建可靠、可扩展的 Web 应用程序。与许多其他的 React 框架不同,Next.js 还提供了一些处理外部请求数据的方法和技巧,让应用程...

    2 小时前
  • 用 Fastify 实现自定义错误处理器

    Fastify 是一个基于 Node.js 的快速和低开销 Web 框架。它专为构建高效和可伸缩的服务而设计,提供了很多强大的功能,如内置的插件系统、路由、中间件等等。

    2 小时前
  • Kubernetes 中的 Job 和 CronJob 使用详解

    Kubernetes 是一个用于管理容器化应用程序的开源平台,它有助于在大规模分布式系统中轻松部署、管理和扩展应用。在 Kubernetes 中,Job 和 CronJob 是用于执行批处理任务和定期...

    2 小时前
  • 在 Hapi.js 中实现推送通知

    推送通知是现代 Web 应用程序的重要组成部分,使得您可以向用户传递实时信息,而无需用户每次主动获取。在这篇文章中,我们将探讨如何在 Hapi.js 中实现推送通知,以便更好地服务我们的用户。

    2 小时前
  • 用 Redis 响应快速的 GraphQL 查询

    GraphQL 是一种用于 API 的查询语言,可以让前端开发人员灵活地请求数据并减少不必要的网络请求。然而,在大型应用程序中,GraphQL 查询可以变得相当复杂和缓慢,尤其是在处理大量数据时。

    3 小时前
  • JavaScript 面向对象编程:ECMAScript 2021 中的类

    在 JavaScript 中,面向对象编程(OOP)是一种常见的编程范型。在 ECMAScript 2021 中,类被引入作为一种更加强大且方便的面向对象编程方式。

    3 小时前
  • Chai 报错:expected [] to have length 1 解决方法

    前言 在前端开发中,测试是非常重要的一部分。而 Chai 是一款常用的 JavaScript 测试库,它提供了许多有用的断言和 API,可以帮助我们进行测试驱动开发(TDD)和行为驱动开发(BDD)。

    3 小时前
  • Serverless 如何实现热启动?

    随着云计算技术的发展,Serverless 架构已经成为了一种越来越受欢迎的应用架构模式,它可以为开发者提供更快的部署、更低的成本和更好的可伸缩性。但是,Serverless 架构中的函数冷启动问题一...

    3 小时前
  • Redis 的应用场景与优缺点分析

    在前端开发中,缓存是一个非常有用的工具,它可以提高网站的响应速度以及数据传输的效率。而 Redis 作为一款常用的缓存服务器,可以应用在很多场景下。本文将介绍 Redis 的应用场景及其优缺点分析,旨...

    4 小时前
  • 如何在 React 中使用 WebSocket 进行实时通信

    WebSocket 是一种提供实时双向通信的协议,与传统的 HTTP 协议不同,它可以在客户端和服务器之间建立持久连接,使得服务器可以主动向客户端推送消息。React 作为一种流行的开发框架,为了实现...

    4 小时前
  • ECMAScript 2017 中的字符串填充方法:String.padStart() 和 String.padEnd()

    在 JavaScript 中,字符串操作一直是前端开发中最基础也最常用的功能之一,ECMAScript 2017 标准中新增的字符串填充方法 String.padStart() 和 String.pa...

    4 小时前
  • 以 Flex 布局构建响应式设计分割视图

    在当今网络应用程序生态系统中,设计响应式界面非常重要。这种技术允许用户适应不同设备和浏览器屏幕,并使应用程序对于各种设备尺寸都具有良好的适应性。因此,在开发前端应用程序时,设计响应式视图是必不可少的。

    4 小时前
  • 如何在 Angular 应用中实现单元测试

    如何在 Angular 应用中实现单元测试 单元测试在软件工程中是非常重要的一部分,它可以提高代码质量和可维护性。对于 Angular 应用来说,单元测试同样也是不可或缺的。

    4 小时前
  • 多方共建,让北京市无障碍发展健康前行

    多方共建,让北京市无障碍发展健康前行 随着互联网技术的迅猛发展,人们的交流和信息获取方式愈加多样化,但同时,我们也看到了无障碍互联网的重要性。 无障碍网站是指在设计、开发和使用时,考虑了所有人的需求,...

    4 小时前
  • Sequelize(ORM)基础

    在开发现代 Web 应用时,数据存储是不可或缺的一部分。一般而言,应用需要连接数据库来存储和检索信息。但是,直接连接数据库并进行数据操作通常是困难的,因为大部分关系数据库(如 SQLite,Postg...

    5 小时前
  • Deno 应用中如何处理 XML 格式数据

    引言 Deno 是一个新兴的 JavaScript 运行时环境,它与 Node.js 类似,但具有许多 Node.js 中缺失的特性,例如 TypeScript 的原生支持、安全的模块加载等等。

    5 小时前
  • React 中的内联样式和外部样式表的区别

    React 是一种广泛使用的 JavaScript 库,用于开发用户界面。React 支持一种特殊的语法,称为 JSX,它使得将 HTML 和 JavaScript 混合使用变得更加简单和直观。

    5 小时前

相关推荐

    暂无文章