Redux 教程:从入门到实战

前言

Redux 是一个流行的 JavaScript 应用程序状态管理工具。它提供了一种可预测的状态管理方法,以便我们在应用程序中轻松地处理数据流和状态管理。本文将详细介绍 Redux 的概念、工作原理以及如何将其用于实际项目中。

Redux 的基本概念

Redux 的主要目标之一是使应用程序的状态变化变得可预测。它实现了单向数据流,这意味着应用程序中的数据只能在一个方向上流动。而且,在 Redux 中,应用程序的状态被存储在一个单一的对象中,称为“state”。

Action

Action 是 Redux 中最基本的概念。它是一个包含要执行的操作的对象。例如,当用户单击应用程序中的按钮时,应用程序将创建一个 Action 对象,然后 Redux 将负责在应用程序中找到与该 Action 相关联的 Reducer,并执行相应的操作。

Action 对象通常包含一个类型(type)、负载(payload)和任意其他数据。类型是用于标识 Action 的字符串。这就是 Reducer 如何知道要执行哪个操作。负载是一个任意的 JavaScript 对象,它是执行操作所需的任意数据。

下面是一个示例 Action 对象:

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

Reducer

Reducer 是一个函数,它负责根据 Action 的类型更新应用程序的状态。当 Reducer 接收到 Action 对象时,它会从应用程序的状态中查找相关的数据,并执行相应的操作。

它采用两个参数:当前的应用程序状态和一个 Action 对象。然后使用这些值来计算一个新的应用程序状态。Reducer 函数必须是纯函数,这意味着它不应该修改它的输入参数,并且它应该始终返回一个新的对象。

下面是一个简单的 Reducer 示例:

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

Store

Store 是 Redux 中的重要概念。它是一个负责管理应用程序状态的对象。它维护了应用程序的状态,并将其传递给需要访问该状态的组件。Store 也负责注册监听器,当状态发生变化时,通知这些监听器。

Store 对外暴露了三个方法:getState()、dispatch(action) 和 subscribe(listener)。getState() 方法返回当前的应用程序状态。dispatch(action) 方法将一个 Action 对象分派给应用程序的 Reducer。subscribe(listener) 方法注册一个监听器,它将在状态更改时调用。

以下是一些示例 Store 代码:

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

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

Dispatch

Dispatch 是将 Action 对象分派给应用程序中的 Reducer 的过程。它是应用程序中发送 Action 的唯一方法。Store 对象的 dispatch() 方法用于将 Action 对象分派给 Reducer。

Selector

Selector 是用于从应用程序状态中检索数据的函数。可以通过使用 createSelector() 方法来创建 Selector。

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

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

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

Redux 的工作原理

Redux 的工作原理可以被简述为“数据流”。这种方式确保了应用程序状态的变化是可预测的。

当组件触发某个事件时,它将创建一个 Action 对象并将其发送到 Store。Store 将接收到的 Action 对象转发给应用程序中的 Reducer。Reducer 将计算一个新的应用程序状态,并将其返回给 Store。Store 将状态更新通知所有订阅的组件。此后,组件将使用新状态重新渲染。

Redux 中每个部分的工作原理如下:

  • Action:Action 是一个含有 type 和 payload 属性的简单对象。它用于描述某个事件的类型和数据。
  • Reducer:Reducer 是一个纯函数,接收应用程序的当前状态和一个 Action 对象。该函数通过计算新的状态来响应事件。
  • Store:Store 负责存储整个应用程序的状态,并在响应事件时更新该状态。
  • Selector:Selector 是一个用于从应用程序状态中提取数据的函数。

Redux 在实战中的应用

让我们使用一个简单的 TodoList 应用程序来演示如何使用 Redux。在这个应用程序中,我们将使用 Redux 来处理 Todo 的添加、删除和完成状态。

  1. 创建一个新的 React 应用程序:
--- ---------------- ---------------
  1. 安装 Redux 和 React-Redux:
--- ------- ----- -----------
  1. 创建一个新的 todosReducer.js 文件,并添加一个简单的 Reducer:
----- ------------ - -
  - --- -- ----- ---- ------ ---------- ----- --
  - --- -- ----- ----- --------- ---------- ---- --
--

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

------ ------- -------------
  1. 创建一个新的 rootReducer.js 文件,并将 todosReducer 导入并合并:
------ - --------------- - ---- --------
------ ------------ ---- -----------------

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

------ ------- ------------
  1. 在应用程序中创建一个 store,并将 rootReducer 传递给它:
------ - ----------- - ---- --------
------ ----------- ---- ----------------

----- ----- - -------------------------
  1. 创建一个 TodoList 组件,它将从 store 中获取 todos。在 componentDidMount 方法中,我们将创建一个简单的 Action 并将其分派给 store。
------ ------ - --------- - ---- --------
------ - ------- - ---- --------------

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

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

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

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

------ ------- -----------------------------------
  1. 将 TodoList 组件添加到应用程序中:
------ ------ - --------- - ---- --------
------ ------------
------ -------- ---- -------------

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

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

现在,应用程序会在渲染时添加一个新的 Todo 到 todos 数组中。我们可以在调试器中看到 Redux 状态如何更新,这里将包括新创建的 Todo。

之后你可以添加实现删除 Todo 和切换 Todo 完成状态的逻辑,以便完整地使用 Redux 。

结论

Redux 是一个流行的状态管理工具,它提供了一种可预测的状态管理方式。Redux 将应用程序状态保存在一个单一的对象中,并使用 Action 和 Reducer 来实现数据流。Store 负责管理应用程序中的状态,并通知订阅的组件。Selector 是从应用程序状态中检索数据的函数。

我们已经学习了如何创建 Redux 应用程序,在创建应用程序状态、创建 Reducer、创建 Store 和传递状态给组件方面进行了详细的说明。希望这篇 Redux 教程可以帮助你更好地理解 Redux,并帮助你在实际项目中使用它。

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