【发布时间】:2021-12-12 22:14:21
【问题描述】:
我有这个 React 组件
import React, {useEffect, useRef, useState} from 'react';
export default function MyD3(props) {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("first log")
const interval = setInterval(() => {
console.log('This will run every second!');
}, 1300);
console.log("second log")
return () => clearInterval(interval);
},[]);
return (
<div >
<p>{count}</p>
</div>
);
}
我想了解为什么 setInterval 中的代码一直在运行。
当组件第一次挂载时记录
first log
和
second log
在浏览器控制台中打印一次。
让我吃惊的是,尽管如此,useEffect 代码并没有重复,
This will run every second!
一直在打印。
我想知道的是为什么,我希望它的范围仅限于 useEffect,因此留下 useEffect 代码也会中断间隔的执行。
我并不清楚 react / js stack 是如何工作的。
【问题讨论】:
-
"这样留下useEffect代码"组件卸载时调用清理代码
-
只要你的组件被挂载,
setInterval里面的代码就会被重复执行。这就是setInterval的工作原理。
标签: javascript reactjs use-effect callstack