如何分离 Redux reducers 和 action creators 的逻辑?

Redux 是一个流行的状态管理库,它将应用程序状态存储在一个单一的 JavaScript 对象中,并提供了一些工具来声明性地更新该状态。Redux 通过 reducers 处理应用程序中的不同状态变化,而 action creators 则负责触发这些状态变化。

然而,在复杂的应用程序中,reducers 和 action creators 的逻辑可能会交织在一起,导致难以维护的代码。因此,本文将介绍如何将 reducers 和 action creators 的逻辑进行分离,以帮助您编写更清晰、更可维护的代码。

Reducers 和 Action Creators 的职责

在深入讨论如何分离 reducers 和 action creators 的逻辑之前,我们需要明确 reducers 和 action creators 的职责。

Reducers

Reducers 负责处理应用程序状态的变化。当 action 被分派到 reducer 时,reducer 将根据 action 类型执行相应的操作并返回新的应用程序状态。

以下是一个简单的 reducer 示例,用于处理 "ADD_TODO" 动作类型:

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

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

Action Creators

Action creators 是纯 JavaScript 函数,它们负责返回 action 对象。这些对象包含有关应用程序状态变化的信息,例如操作类型和有效载荷。

以下是一个简单的 action creator 示例,用于创建 "ADD_TODO" 动作类型:

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

将 reducers 和 action creators 的逻辑分离

为了将 reducers 和 action creators 的逻辑分离,我们需要遵循一些最佳实践。

1. 单一职责原则

单一职责原则是指一个函数或对象应该只做一件事情。在 Redux 中,reducers 应该只处理与应用程序状态相关的逻辑,而 action creators 应该只返回与应用程序状态变化相关的 action 对象。

2. 抽象通用逻辑

如果您发现多个 reducers 或 action creators 共享相似的逻辑,则可以将该逻辑提取到单独的函数或模块中,并在需要时重用它。

3. 使用辅助函数

Redux 提供了一些辅助函数,例如 combineReducers 和 bindActionCreators,可帮助将 reducers 和 action creators 的逻辑进行分离。

combineReducers 函数允许您将多个 reducers 组合成一个单一的 reducer,从而使代码更易于维护。例如,以下代码将两个 reducers 组合成一个 rootReducer:

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

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

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

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

bindActionCreators 函数可用于将多个 action creators 绑定到 dispatch 函数上。这有助于避免在组件中编写重复的代码。例如,以下代码使用 bindActionCreators 将两个 action creators 绑定到 dispatch 上:

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

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

示例代码

以下是一个示例应用程序,其中包含一个 reducer 和一个 action creator。我们将演示如何将它们的逻辑分离。

首先,让我们定义一个简单的 reducer,用于处理 "INCREMENT_COUNTER" 和 "

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