setInterval 无限制重新渲染反应完整组件。为什么会发生这种情况以及如何解决?
P粉978742405
P粉978742405 2024-04-03 15:39:05
0
1
511

这是我的反应代码。它使组件无限重新渲染:

const [seconds, setSeconds] = useState(60)
useEffect(() => {
    const interval = setInterval(() => {
        setSeconds(seconds => seconds - 1);
    }, 1000);
    return () => clearInterval(interval);
}, []);

console.log("object");

P粉978742405
P粉978742405

全部回复(1)
P粉476046165

发生这种情况是因为您仅在组件卸载时清除间隔,这仅在用户离开页面时才会发生。

也许这就是您所需要的?当间隔达到 0 时,我将清除它。但是为此我必须使用引用,我不能使用 setInterval 中的状态,因为它只有初始值:

export default function App() {
  const [seconds, setSeconds] = useState(5);
  const secondsRef = useRef(seconds);

  useEffect(() => {
    const interval = setInterval(() => {
      if (secondsRef.current  seconds - 1);
    }, 1000);
    return () => clearInterval(interval);
  }, []);

  console.log("running", new Date());

  return 

{seconds ; }

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板