【发布时间】:2021-08-06 20:32:30
【问题描述】:
下面的代码正确更新了计数状态,但是当使用 console.log 输出计数值时,如果从 useEffect() 钩子中的 setInterval 内的函数调用,它会显示非常奇怪的行为。
您希望在 console.log 中看到一个递增的数字,但 fetchTimelineItems() 函数的输出很奇怪。当计数为 1 时,输出在 0 和 1 之间交替。当计数为 2 或更多时,它以随机顺序输出所有数字。
查看代码框链接以重现此行为。
预期的行为是在 fetchTimelineItems() 函数中看到正确的计数值。
提前感谢您指出正确的方向来解决此问题。
const Example = ({ title }) => {
const [count, setCount] = useState(0);
const handleCount = () => {
setCount(count + 1);
console.log(count);
};
function fetchTimelineItems() {
console.log("count from within fetch function: " + count);
}
useEffect(() => {
setInterval(() => {
fetchTimelineItems();
}, 3000)
},[count]);
return (
<div>
<p>{title}</p>
<button onClick={handleCount}>Increase count</button>
</div>
);
};
https://codesandbox.io/s/count-update-s5z94?file=/src/index.js
【问题讨论】:
-
您正在设置多个超时。使用效果在安装时运行
标签: reactjs react-hooks setinterval