【发布时间】:2021-10-24 17:48:49
【问题描述】:
我一直在尝试setInterval。这两个代码都是在 Chrome 中执行的。下面是我的反应组件
function App() {
let [value, setValue] = useState(0);
useEffect(() => {
const id = setInterval(() => console.log(value), 1000);
return () => clearInterval(id);
}, []);
return (
<div className="App">
<p>{value}</p>
<button onClick={() => setValue(value + 1)}>+</button>
<button onClick={() => setValue(value - 1)}>-</button>
</div>
);
}
setTimeout 内的useEffect 中的console.log 会不断打印0,无论您通过按钮单击增加 或减少 值的次数。
以下代码正在浏览器 (Chrome) 控制台中执行
let value = 0;
setInterval(() => console.log(value), 1000);
value = 3; // can be considered as setValue (sort of)
现在浏览器控制台打印3,这是预期的。
我想知道为什么行为会有所不同,如果有人能指出原因,我将不胜感激。任何其他可以更好地证明这一点的代码 sn-p 或链接都会很棒。
【问题讨论】:
-
并且在您的第二个代码 sn-p 中,您在代码块中明确定义一个值,然后读取结果。在第一个中,您正在尝试读取异步设置的状态的结果。
标签: javascript reactjs setinterval setstate