繁体   English   中英

为什么组件渲染 3 次?

[英]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 会记住其中的所有值。 您可以使用两种方式:

  1. count添加到 useEffect 的依赖项数组。 当计数改变时,useEffect 会刷新。

     useEffect(() => { //Your old code here }, [count]); //Here
  1. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM