/**
* init array: [1, 2]
* Expect
* array per 1s: [1, 2, 3]
* array per 2s: [1, 2, 3, 4]
* array per (n)s: [1, 2, 3, 4, ..., n]
*/
const [countList, setCountList] = useState([]);
const counter = useRef(0);
useEffect(() => {
const interval = setInterval(() => {
counter.current = counter.current + 1;
setCountList([...countList, counter.current]);
}, 1000);
return () => clearInterval(interval);
});
return (
<>
<div>{countList.map((count) => count + ',')}</div>
</>
);
我希望每一秒,数组推送一个项目,然后在UI上显示,但数组只更新最后一个项目。Exp [1,2] =〉[1,3] =〉[1,4] ...
2条答案
按热度按时间lymnna711#
正确的方法是在挂载时设置一次间隔,而不是重复设置和清除它。这有点违背了设置间隔的目的。您需要使用回调函数来获取前一个值,并将一个空的依赖项数组传递给useEffect
演示:https://stackblitz.com/edit/react-ts-1rt29v?file=App.tsx
dm7nw8vv2#
试试这个
更新
countList
时,必须重新生成interval
。