ReactJS: setTimeout() 不起作用?

阅读时长 3 分钟读完

在React应用程序中,setTimeout()函数常被用于实现定时器功能。但是,有时候你会发现即使正确调用了setTimeout(),它似乎并没有按预期工作。在本文中,我们将深入探讨setTimeout()的工作原理以及在React中如何正确使用它。

setTimeout()简介

setTimeout()是JavaScript中的一个内置函数,它允许您在指定时间后执行一段代码。setTimeout()接受两个参数:要执行的函数和延迟时间(以毫秒为单位)。

上面的代码将等待1秒钟,然后输出 Hello, world! 到控制台。

setTimeout() 在 React 中的使用

在React中,setTimeout()通常被用来触发异步操作或延迟更新组件状态。例如,以下代码将等待1秒钟,然后将state的message属性设置为“Hello, world!”:

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

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

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

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

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

然而,当您运行上面的代码时,您可能会发现它并没有按预期工作——页面上不会显示任何内容。这是因为React在检测到状态变化时会重新渲染组件。但是,由于setTimeout()函数的调用不会导致React进行重新渲染,因此它无法将更新显示在页面上。

解决方案

为了解决这个问题,我们可以使用React中提供的useEffect()钩子来注册setTimeout(),并在返回的函数中清除定时器。这将确保在组件卸载时清除所有未完成的异步操作。

以下是一个示例代码:

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

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

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

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

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

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

如上所述,我们将setTimeout()函数的调用包装在useEffect()中,并返回一个清理函数以确保在组件卸载时清除定时器。

结论

虽然setTimeout()是JavaScript中非常有用的函数之一,但在React中使用它需要特别注意。要确保在React应用程序中正确使用setTimeout(),您应该使用useEffect()钩子,并在返回的函数中清除定时器。这将帮助您避免在渲染期间发生意外的副作用。

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

纠错
反馈