Redux 如何管理组件的状态

Redux 是一个 JavaScript 应用程序状态管理工具,专门用于处理应用程序的状态,并且组件可以方便地从中获取状态和派发动作。在 React 中使用 Redux 能够让我们更可预测、更简单和更具维护性,这一点在大型应用程序中尤为重要。

状态管理

状态(state)是指应用程序的数据,包括 UI 的数据和应用程序的内部数据。在 React 应用程序中,状态有时被描述为组件的本地状态,因为它们只能被组件本身访问,通常也指任何在多个组件之间共享的数据。

在 React 中,我们可以将状态存储在组件本身中,并通过 props 将状态传递给子组件。这是很好的,但当应用程序变得更加复杂时,这种方法可能会变得非常混乱和难以理解。

Redux 通过引入“状态容器”的概念,旨在提高应用程序的可维护性和可扩展性。组件仍然可以在其中存储其本地状态,但它们对于应用程序状态的更新和访问现在会更加高效和明智。

Redux 状态容器

Redux 是一个状态容器,它由存储库、动作、操作和发生器组成。组件使用这些元素来获取和更新共享状态。

存储库(store)是应用程序状态的唯一来源,它存储整个应用程序的状态树,并提供访问和修改应用程序状态的方法。组件使用存储库中的状态来保证视图始终是最新的,并通过派发动作来消除异步或间接状态更改所带来的风险。

动作(action)是描述应用程序状态改变的纯 JavaScript 对象。在 Redux 中,动作是发送给存储库的唯一有效信息,可以由任何代码库生成,并指示存储库更改其状态。动作可以是同步或异步的,并且可以在应用程序中派生一系列其他动作。

操作(reducer)是要执行的函数,每当接受到新的动作时都会更新应用程序的存储库。操作编写在纯函数中,纯函数的参数是当前状态和应用程序中发生的动作。纯函数总是返回新的状态对象,而不是修改现有的。

发生器(selector)是将状态转换为所需格式的函数。发生器是以纯函数的形式编写的,它接收存储库中的状态,并返回可以由视图使用的格式。发生器被视图组件用于从存储库中选择所需的状态的部分,并将其传递给视图。

Redux 工作流程

Redux 工作流程如下:

  1. 组件触发动作。组件中的按钮、表单和其他 UI 元素触发的用户事件将创建动作。
  2. 动作被发送到操作。动作将被分派给对应操作,执行逻辑并返回新的状态。
  3. 存储库更新。返回的新状态将与旧状态合并,存储在存储库中,并更新应用程序的状态。
  4. 视图更新。作为新状态的一部分,UI 的视图被更新,并显示最新的应用程序状态。

构建 Redux 应用程序

下面是一些基本步骤,应用到一个典型的基于 React 的 Redux 应用程序中:

安装与配置

首先,您需要安装必要的软件包,包括 Redux 和 React-redux。React-redux 是一个用于将 Redux 绑定到 React 应用程序中的库。

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

接下来,需要创建一个存储库。在存储库中,需要定义一些初始状态和一些关键的操作:

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

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

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

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

在上面的代码中,我们创建了一个初始状态为 { count: 0 } 的存储库,然后编写了两个操作:INCREMENTDECREMENT,分别增加和减少计数器。

映射状态和操作

现在我们需要将状态映射到组件中。我们使用 React-redux 库来完成这个过程,这个库提供了一个 Provider 组件,它将存储库传递给根组件,并使其对子组件可用。

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

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

现在,我们可以将存储库中的状态和操作映射到组件的 props 中。这可以通过编写函数 mapStateToPropsmapDispatchToProps 来实现。

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

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

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

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

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

在上面的代码中,mapStateToProps 函数映射存储库中的状态到组件的 props 中,mapDispatchToProps 函数将操作映射到组件的 props 中。

现在,我们的组件可以通过 props 访问存储库中的状态和操作,并相应地更新 UI。

发布与订阅

现在,我们的应用程序将能够像任何其他 Redux 应用程序一样工作。每当用户与我们的应用程序交互时,它都将触发动作,并将其发送给操作。操作将更改当前状态并将其更新到存储库中,最终更新 UI 视图。

结论

Redux 是一个优秀的给 React 应用程序添加状态管理的工具。通过将状态存储在存储库中,我们能够维护较大应用程序中的状态,并在应用程序层面上提高可维护性和可扩展性。请记住,每个动作都应该有对应的操作,每个操作都应该是一个纯 JavaScript 函数。

最后,重要的是要了解,Redux 并不是适合每个 React 应用程序的,具体情况具体分析。对于小型应用程序,使用本地状态和 props 可能已经足够了,但是如果您的应用程序越来越大,您可能需要考虑切换到 Redux。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672ddf48eedcc8a97c86374a