下面只是获取时间并显示出来,并使用一个JS间隔定时器调用一个函数来设置状态,从而使第一个useEffect()
再次运行以获取更新的时间并更新屏幕:
export default function App() {
const [data, setData] = useState({});
const [timeID, setTimeID] = useState(0);
useEffect(() => {
fetch("https://worldtimeapi.org/api/timezone/America/Los_Angeles")
.then(res => res.json())
.then(dataFetched => {
setData(dataFetched);
});
}, [timeID]);
useEffect(() => {
setInterval(() => {
console.log("INTERVAL", timeID);
setTimeID(timeID + 1);
}, 3000);
}, []);
return (
<div className="App">
<pre className="data">
{ data.datetime }
</pre>
</div>
);
}
示例:https://codesandbox.io/s/festive-hawking-fjqnd
它能够更新一次(3 秒后),但 console.log()
始终显示 timeID
为 0
。我认为该函数是一个闭包,应该能够成功调用 setTimeID()
从而改变状态?