Redux 中的 action 和 reducer:实现状态更改

阅读时长 6 分钟读完

Redux 简介

Redux 是一种 JavaScript 状态容器,用于管理 Web 应用程序中的状态。它被设计用于与 React 一起使用,但也可以与其他 UI 库一起使用。Redux 旨在让状态变得可预测、可测试,并易于开发和调试。

Redux 实现了一个单向数据流,其中 action 和 reducer 是核心概念。在这篇文章中,我们将深入介绍 action 和 reducer 的作用和用法。

Action

在 Redux 中,action 是一个 JavaScript 对象,描述对状态进行更改的意图。每个 action 都必须有一个类型(type)属性,以便 reducer 知道要如何处理它。

以下是一个 action 的示例:

在这个示例中,action 的类型为 ADD_TODO,它的 payload 属性包含要添加到任务列表中的详细信息。

可以使用 action 创建函数(action creator)来创建 action。action 创建函数是一个返回 action 对象的函数,它可以接受参数并在需要时生成相应的 action。

以下是一个简单的示例 action 创建函数:

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

在这个示例中,addTodo 是一个 action 创建函数,它接受一个文本参数,并生成一个带有该文本的 ADD_TODO action。

Reducer

在 Redux 中,reducer 是一个纯函数,它接受当前状态和一个 action,然后返回一个新状态。reducer 的任务是根据 action 的类型来更新状态,并返回更新后的状态。

以下是一个 reducer 的示例:

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

在这个示例中,todos 是一个 reducer 函数,它根据不同的 action 类型来更新状态。如果 action 的类型是 ADD_TODO,它会在当前状态后面添加一个新的任务;如果 action 的类型是 TOGGLE_TODO,它会切换任务的完成状态。

Redux 工作流程

在 Redux 中,应用程序的状态被存储在一个单一的 store 中。要更改状态,必须分发一个 action,它会经过所有的 reducers,并返回一个新的状态。

以下是 Redux 工作流程的示意图:

  • Store: 存储整个应用程序的状态。
  • Action: 描述对状态进行更改的意图。
  • Reducer:纯函数,根据 action 的类型来更新状态。
  • View: 显示当前状态,并向 store 分发 action 以触发状态更改。

案例应用

下面是一个使用 Redux 的简单任务列表应用程序的示例代码:

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

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

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

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

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

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

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

在这个示例中,我们首先创建一个 store,并将 todos reducer 注入其中。然后我们创建两个 action 创建函数,addTodo 和 toggleTodo,它们用于向 store 分发 action。最后,我们依次分发三个 action:addTodo('Buy milk')、addTodo('Walk the dog')和 toggleTodo(0)。

当我们分发 addTodo('Buy milk')时,todos reducer 会将这个新任务添加到列表的末尾。当我们分发 addTodo('Walk the dog')时,它会将一个新任务添加到列表的末尾。当我们分发 toggleTodo(0)时,它会切换任务的完成状态。

总结

Redux 提供了一种可预测、可测试和易于调试的状态管理方案。它的核心概念是 action 和 reducer。action 描述了对状态进行更改的意图,而 reducer 根据 action 的类型来更新状态。在使用 Redux 时,我们应该始终将状态存储在一个单一的 store 中,以确保状态的一致性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64993eb448841e98946385ce

纠错
反馈