【发布时间】:2021-07-19 11:55:33
【问题描述】:
我有一个这样的组件:
import { useEffect, useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
console.log("comp run");
const tick = () => {
setCount(count + 1);
console.log(count);
};
useEffect(() => {
const timer = setInterval(tick, 10000);
console.log("effect run");
return () => {
clearInterval(timer);
console.log("clear func run");
};
}, []);
return <div>{count}</div>;
}
export default Counter;
代码运行时,控制台输出如下:
程序运行时立即输出:
比较运行
效果运行
10 秒后:
比较运行
0
10 秒后:
比较运行
0
10 秒后:
0(然后每十秒增加0)
我不明白的是:“comp run”在屏幕上打印了 3 次。为什么是 3?
【问题讨论】:
-
因为您每 10 秒更新一次计数,这会重新渲染您的组件
-
实际上,您似乎没有更新计数,因为它始终为 0。
-
您可能还想考虑使用
useIntervalas usingsetIntervalwith an effect can have odd side-effects 之类的东西。 -
尝试将
setCount(count + 1);切换为setCount(prevCount => prevCount + 1);
标签: javascript reactjs use-state