将 Redux 和 React 决裂的 6 个原因(以及如何避免)

Redux 和 React 是前端开发中非常流行的技术,它们的组合可以让我们构建出更加可靠、可维护的应用程序。然而,在实际开发中,我们也经常会遇到 Redux 和 React 之间的一些问题,这些问题可能会导致我们的应用程序出现性能问题或者出现难以解决的 bug。在本文中,我们将介绍将 Redux 和 React 分离的 6 个原因,以及如何避免它们。

1. 过度使用 Redux

Redux 是一种状态管理库,它可以让我们更好地管理应用程序的状态。然而,有时候我们可能会过度使用 Redux,将所有的状态都存储在 Redux 中,这样会导致应用程序变得臃肿而且难以维护。当我们只需要管理组件级别的状态时,我们可以使用 React 的内置状态管理功能,而不是将这些状态存储在 Redux 中。

示例代码:

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

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

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

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

2. 过度依赖 Redux

有时候,我们可能会过度依赖 Redux,将所有的数据都从 Redux 中获取,这样会导致我们的组件变得不够灵活。当我们只需要获取一些简单的数据时,我们可以直接从组件的 props 中获取,而不是从 Redux 中获取。

示例代码:

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

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

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

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

3. 过度使用 Redux 中间件

Redux 中间件可以让我们在 Redux 的 action 被 dispatch 前或者被 reducer 处理前添加额外的逻辑。然而,有时候我们可能会过度使用 Redux 中间件,这样会导致我们的应用程序变得复杂而且难以维护。当我们只需要添加一些简单的逻辑时,我们可以直接在 action 或者 reducer 中添加,而不是使用 Redux 中间件。

示例代码:

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

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

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

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

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

4. 过度使用 Redux 的高阶组件

Redux 的高阶组件可以让我们更好地将 Redux 的状态传递给组件。然而,有时候我们可能会过度使用 Redux 的高阶组件,这样会导致我们的组件变得复杂而且难以维护。当我们只需要将一些简单的状态传递给组件时,我们可以直接使用 props,而不是使用 Redux 的高阶组件。

示例代码:

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

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

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

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

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

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

5. 过度使用 Redux 的 connect 函数

Redux 的 connect 函数可以让我们将 Redux 的状态和操作传递给组件。然而,有时候我们可能会过度使用 connect 函数,这样会导致我们的组件变得复杂而且难以维护。当我们只需要将一些简单的状态和操作传递给组件时,我们可以直接使用 props,而不是使用 connect 函数。

示例代码:

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

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

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

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

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

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

6. 过度使用 Redux 的 selector

Redux 的 selector 可以让我们从 Redux 的状态中选择一些特定的数据。然而,有时候我们可能会过度使用 selector,这样会导致我们的应用程序变得复杂而且难以维护。当我们只需要选择一些简单的数据时,我们可以直接从 Redux 的状态中获取,而不是使用 selector。

示例代码:

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

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

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

如何避免这些问题?

避免这些问题的关键是了解 Redux 和 React 的优缺点,并且根据实际情况进行选择。当我们只需要管理组件级别的状态时,我们可以使用 React 的内置状态管理功能。当我们只需要获取一些简单的数据时,我们可以直接从组件的 props 中获取。当我们只需要添加一些简单的逻辑时,我们可以直接在 action 或者 reducer 中添加。当我们只需要将一些简单的状态传递给组件时,我们可以直接使用 props。当我们只需要选择一些简单的数据时,我们可以直接从 Redux 的状态中获取。

总结

在本文中,我们介绍了将 Redux 和 React 分离的 6 个原因,以及如何避免它们。了解这些问题并避免它们可以让我们构建出更加可靠、可维护的应用程序。在实际开发中,我们应该根据实际情况进行选择,避免过度使用 Redux 和 React 的一些功能。

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