使用useRef()代替useState()来存储setInterval返回的intervalID,并直接通过React的useEffect() hook更新state。例如:
import React, { useState, useRef, useEffect } from "react";
const App = () => {
const [count, setCount] = useState(0);
const intervalID = useRef(null);
useEffect(() => {
intervalID.current = setInterval(() => {
setCount(count + 1);
}, 1000);
return () => {
clearInterval(intervalID.current);
};
}, [count]);
const handleClick = () => {
setCount(0);
};
return (
{count}
);
};
export default App;
在上面的示例中,我们首先使用useRef() hook来声明一个名为intervalID的变量,并初始化为null。在useEffect() hook中,我们把intervalID.current设置为setInterval()返回的intervalID,以便稍后清除interval。我们还传递了count作为useEffect() hook的依赖项,以便每次count更新时都会重新创建interval。最后,我们通过直接使用setCount()来更新count值,而不是通过count值本身来更新它。这确保了每次更新count时都会调用setInterval()。