React + Redux 应用中长时间运行进程的位置

阅读时长 4 分钟读完

在开发 React + Redux 应用时,我们通常需要处理一些长时间运行的进程,比如异步请求、轮询操作等。这些进程需要存储在何处成为一个重要问题,因为它们需要在组件卸载和挂载之间继续执行。

存储位置

有两个主要的选项可以存储长时间运行的进程:组件内部状态和 Redux store 状态。下面我们将分别讨论它们的优缺点。

组件内部状态

在组件内部状态中存储长时间运行的进程是一种简单而直接的方法。您可以使用 useState 钩子或在类组件中使用 this.state 来存储状态,并在 componentDidMountcomponentWillUnmount 生命周期方法中开始和停止进程。

让我们来看一个简单的示例:

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

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

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

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

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

在上面的示例中,我们在 PollingComponent 中定义了 data 和一个定时器,该定时器每秒钟调用一次 fetchData 函数并将结果存储在 data 中。我们使用 useEffect 钩子来启动和停止定时器。

这种方法的优点是非常简单直接,易于理解和实现。然而,它可能会导致状态管理变得混乱,尤其是当多个组件需要访问相同的进程时。

Redux store 状态

另一种存储长时间运行的进程的方法是将它们存储在 Redux store 中。这种方法可以使状态管理更加规范化和集中化,因为您可以在多个组件之间共享数据并将其存储在一个地方。

下面是一个示例:

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

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

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

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

在上面的示例中,我们使用了 Redux,将数据存储在 Redux store 中,并使用 connect 函数将 PollingComponent 组件连接到 store。我们还定义了 fetchDataAction,该函数负责发出异步请求并将结果存储在 Redux store 中。

这种方法的优点是更好的状态管理和共享,以及对组件之间依赖关系的更好控制。但是,它需要一些额外的代码来配置 Redux,并且可能会增加代码复杂度。

结论

在 React + Redux 应用中存储长时间运行的进程的位置取决于您的具体需求和偏好。如果您需要更好的状态管理和共享,则可以将其存储在 Redux store 中。否则,将其存储在组件内部状态中也是一个不错的选择。

无论您选择哪种方法,请确保在组件卸载时停止进程以避免潜在的内存泄漏问题。

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

纠错
反馈