[英]why does the component render 3 times?
我有一个这样的组件:
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 ?
这是因为useEffect 会记住其中的所有值。 您可以使用两种方式:
将count
添加到 useEffect 的依赖项数组。 当计数改变时,useEffect 会刷新。
useEffect(() => { //Your old code here }, [count]); //Here
在useCallback钩子和 memoize 函数中创建一个函数以获得更好的性能。 像第一种方式一样工作,但取决于刻度功能,取决于计数状态。
const tick = useCallback(() => { setCount(count + 1); console.log(count); }, [count]); useEffect(() => { const timer = setInterval(tick, 1000); console.log("effect run"); return () => { clearInterval(timer); console.log("clear func run"); }; }, [tick]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.