【发布时间】:2021-07-14 00:18:32
【问题描述】:
我有以下代码,我希望它每 2 秒在屏幕上多打印 10 个。但是,它只打印 10 次。 console.log(digits) 给了我正确的 10 数组。如何每 2 秒向数组添加 10 并在每次添加 10 时在屏幕上打印更新的数组?
这里的代码沙箱:https://codesandbox.io/s/silly-https-zk58p?file=/src/App.js
import { useEffect, useState } from "react";
let data = [];
export default function App() {
const [digits, setDigits] = useState([]);
useEffect(() => {
let timer = setInterval(() => {
data.push(10);
setDigits(data);
console.log(digits);
}, 2000);
return () => clearInterval(timer);
}, [digits]);
return <div className="App">{digits}</div>;
}
【问题讨论】:
-
这是因为
setDigits(data);使用数组做到这一点setDigits([...data]);。工作示例:codesandbox.io/s/crazy-kapitsa-cp5qf?file=/src/App.js 或者更好的是,删除data蚂蚁只需执行let timer = setInterval(() => { setDigits([...digits, 10]); }, 2000); -
@Lith 你能提供一个带有解释的答案以便我接受吗?
标签: reactjs use-effect use-state