javascript - react setInterval 和 useState

标签 javascript reactjs

我有 2 个问题。首先,为什么这段代码不起作用。其次,为什么这段代码在 2^n -1 例如 1-3-7-15 时变慢

let time = 0
function App() {
  const [mytime, setMytime] = useState(time)
  setInterval(() => {
    time += 1
    setMytime(time)
  }, 1000)
  return <div> {mytime} </div>

最佳答案

问题

setInterval 每次当 mytime 更改以重新呈现时(当您调用 setMytime 时)都会被调用。 setInterval 调用的次数呈指数级增长。这也会导致内存泄漏。

解决方案

您应该只运行一次。您应该使用带有空依赖项数组的 useEffect Hook 。

像这样尝试。

import { useEffect, useState } from "react";

function App() {
  const [mytime, setMytime] = useState(0);

  useEffect(() => {
    // create a interval and get the id
    const myInterval = setInterval(() => {
      setMytime((prevTime) => prevTime + 1);
    }, 1000);
    // clear out the interval using the id when unmounting the component
    return () => clearInterval(myInterval);
  }, []);

  return <div> {mytime} </div>;
}

export default App;

Edit competent-night-ufndlc

关于javascript - react setInterval 和 useState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71172632/

相关文章:

reactjs - 更新 useState 和 AsyncStorage 并根据给定结果重新渲染屏幕

reactjs - 如何将 Prop 传递给 React Big Calendar 自定义组件?

reactjs - Safari 浏览器的 Navigator.permissions 的替代方案是什么?

javascript - 获取对象中的第一个字符串 javascript lodash

javascript转换正则表达式模式

javascript - 如何使用 Javascript 获取文本区域的值?

javascript - Object.keys 方法如何对字符串键 id 进行排序

javascript - react Js : mountNode is not defined no-undef error

JavaScript 正则表达式替换字符串的所有部分,但包含特定字符串的部分除外

css - 更改 Material-UI 概述的芯片焦点和悬停颜色