npm 包 redux-normalizr 使用教程

Redux 是一种状态管理库,旨在使 Web 应用程序的状态管理更加可控和可维护。redux-normalizr 是一个基于 Normalizr 的 Redux 数据库规范化器,用于简化挂钩 Redux 应用程序状态的处理器的操作。本文将为您介绍操作 redux-normalizr 的详细指南,协助您实现更轻松,可读性更高的 Redux 应用程序。

安装

使用 npm 安装:

npm install redux-normalizr

然后使用 import 引入:

import normalize from 'redux-normalizr'

如何使用 redux-normalizr

redux-normalizr 使基于 Normalizr 的 Redux 数据规范化器变得容易,它支持三个函数:

  • normalize
  • denormalize
  • schema

本文将依次介绍这些函数的使用。

normalize()

normalize() 函数用于规范化嵌套的对象和数组,使它们更容易用于 Redux 状态管理。

例如,您可能有一个包含客户端和订单的数据:

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

您可以使用 normalize() 函数将此数据规范化,将相关实体分组并创建一个新的“entyities”对象。此对象包含每个对象的 id,并将每个实体映射到该实体的 ID。

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

在上面的示例中,entities 对象看起来像这样:

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

这将使您可以轻松查找所有客户端或订单。例如,要查找第一个客户端的所有订单,您可以使用以下代码:

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

denormalize()

denormalize() 函数用于将规范化的对象重新映射到数据结构。

例如,如果您拥有上述客户端和订单的 entities 对象和一个 result 数组:

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

您可以使用 denormalize() 函数轻松地重新组合数据,如下所示:

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

schema()

每个对象都需要标识属性,以区分不同对象。redux-normalizr 使用 schema 为每个对象定义一个“严格”结构。下面是一个客户端架构的例子:

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

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

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

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

此模式定义一个客户端模式('clients'),该模式由一个简单的客户端模式提供。对于每个实体,可以通过定义一个谷物来自定义其行为。在这种情况下,我们只需指定客户端对象的 idAttribute 属性即可。

例子

现在您已经了解了如何使用 redux-normalizr,我们来看一个完整的示例。在此示例中,我们使用 redux-normalizr,Asynchronous libraries(thunk)和 React 来构建一个简单的带有后端的 book club 应用程序。

首先,我们需要从我们的 API 获取俱乐部和书籍数据。我们将使用 thunk 来调用 API 并将数据规范化:

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

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

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

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

上面的代码使用异步 Aciton Creator(thunk)来调用 API 并将数据规范化。

然后,我们需要在 reducers.js 中更新两个 reducer,以便处理由 fetchClubs 和 fetchBooks 发送到 redux store 的数据:

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

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

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

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

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

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

这里的 reducer 将数据直接存储到 Redux store 中,以便稍后使用。

假设我们有一个 Book 部件,此部件包含在库中提供的所有书籍元素的特定视图。在此组件中,我们可以使用 selectBooks 函数来选择我们所需的书籍:

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

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

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

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

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

我们使用 createSelector 函数从 Redux store 中选择所有书籍,然后使用 react-redux 中的 connect 函数将选择的书籍作为 props 传递给组件。

作者通过介绍 redux-normalizr 的使用方法,结合 React 和 redux,构建了一个简单的带有后端的 book club 应用程序,来帮助我们更好的管理数据。当您编写 Redux 应用程序时,从环境细节中抽象出数据很重要,而 redux-normalizr 帮助简化和加速这一过程。

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


猜你喜欢

  • npm 包 webmaker-translation-stats 使用教程

    前言 作为前端开发者,我们经常需要进行国际化开发,这就需要使用到国际化翻译库,其中 webmaker-translation-stats 就是一个非常实用的 npm 包。

    4 年前
  • npm 包 webpack-for-babel-plugin 使用教程

    如果你是前端开发者,那么一定会经常使用到 webpack 和 babel,其中 webpack 是一个 JavaScript 应用程序打包工具,而 babel 则是一个 JavaScript 编译器,...

    4 年前
  • npm 包 webpack-frontline 使用教程

    在前端开发中,使用 webpack 等打包工具可以方便地管理和处理项目中的各种依赖和资源,而 npm 则是其中最常用的包管理工具之一。而 webpack-frontline 是一个基于 webpack...

    4 年前
  • npm 包 webpack-gcs-plugin 使用教程

    在前端开发过程中,我们通常会使用 webpack 作为构建工具来打包、压缩项目代码。而当我们需要将打包后的代码上传到 Google Cloud Storage 中时,就需要使用到 webpack-gc...

    4 年前
  • npm 包 webpage-info 使用教程

    前言 在前端开发中,获取页面信息是必不可少的一项功能。而在 JavaScript 的生态系统中,npm 是最大的包管理器,里面存放着大量的 JS 开源包。webpage-info 就是其中之一,它能够...

    4 年前
  • npm 包 webpage-scraper 使用教程

    随着互联网的发展,我们日常使用的网站数量越来越多,而各种网站信息的获取也成为了不少开发者关注的话题之一。而在前端开发领域,如何获取网站中的数据也是一个比较常见的需求。

    4 年前
  • npm 包 webpack-glob-entries 使用教程

    Web 开发涉及到很多前端工具,例如 Webpack 工具通过模块化的方式处理静态资源,自动地构建前端项目;而 npm 包管理器则负责前端依赖的安装和管理。webpack-glob-entries 是...

    4 年前
  • npm 包 webpay-webservice-api 使用教程

    简介 webpay-webservice-api 是一个基于 Node.js 的 npm 包,它提供了对 WebPay 的 WebService API 的封装,使得前端开发人员可以方便地调用 Web...

    4 年前
  • npm 包 webdev-201x 使用教程

    若你是一位前端开发人员,那么可能已经听说过 webdev-201x 这个 npm 包。本篇文章(基于 webdev-201x v1.0.0 版本)将为你详细介绍该包的使用方法、特点以及指导意义。

    4 年前
  • npm 包 webdev-assistant 使用教程

    在前端开发过程中,有时候我们需要使用到一些辅助工具来提高工作效率。而 webdev-assistant 就是一款非常实用的 npm 包,可以为我们提供丰富的辅助功能。

    4 年前
  • npm 包 webdev-setup-tools 使用教程

    在前端开发中,我们需要使用各种工具来提高工作效率和代码质量。但是,这些工具的配置往往会占用开发者的大量时间,降低开发效率。为此,有一款名为 webdev-setup-tools 的 npm 包,它可以...

    4 年前
  • npm 包 webdev-setup-tools-aem 使用教程

    在前端开发中,使用 AEM(Adobe Experience Manager)进行 web 开发已经变得越来越普遍。对于新手开发者来说,AEM 的安装和配置过程会变得有些棘手。

    4 年前
  • npm 包 webdev-setup-tools-gems 使用教程

    介绍 webdev-setup-tools-gems 是一个 npm 包,包含了一些常用的 web 开发工具和 gem,可以帮助前端开发者快速搭建工作环境和开发项目。

    4 年前
  • npm 包 webdev-setup-tools-java 使用教程

    简介 webdev-setup-tools-java 是一个基于 Java 开发的 npm 包,它为前端项目的开发过程提供了一系列的自动化工具,目的是为了让前端开发更加高效、智能化和方便。

    4 年前
  • npm 包 webdev-setup-tools-maven 使用教程

    简介 webdev-setup-tools-maven 是一个基于 npm 包的前端工具,它提供了一系列方便快捷的开发配置和管理命令,让前端开发者可以更快速、高效地进行开发工作。

    4 年前
  • npm 包 webpack-generate-umd-externals 使用教程

    前言 对于前端开发者来说,使用 webpack 是非常常见的事情。在 webpack 中,可以使用 externals 配置选项将你的某些依赖指定为外部依赖,然后这些依赖并不会被打包到输出的 bund...

    4 年前
  • npm 包 webpack-glob 使用教程

    前言 作为前端开发人员我们经常会用到 Webpack 进行打包管理,然而在 Webpack 中,文件路径的配置是一个很繁琐且易错的问题。为了解决这个问题,出现了一个叫做 webpack-glob 的工...

    4 年前
  • npm 包 webpayments 使用教程

    npm 包 webpayments 使用教程 在前端开发中,我们经常需要使用到支付功能。而现在,我们可以通过 npm 包 webpayments 来实现网站支付功能的集成。

    4 年前
  • npm 包 webpack-test 使用教程

    如果你是一个前端开发者,那么你应该对 Webpack 打包工具并不陌生。Webpack 是一个现代化的前端打包工具,用来打包和构建 JavaScript 应用程序或者其他类似资源,例如 CSS,图像等...

    4 年前
  • npm 包 webpconv 使用教程

    WebP 是谷歌开发的一种图片格式,它使用了先进的压缩算法,相比于 JPEG 和 PNG 等传统格式,可以显著降低图片的大小,提高网站的加载速度。然而,不是所有浏览器都支持 WebP,所以我们需要将 ...

    4 年前

相关推荐

    暂无文章