JS 计时器调用的函数可以调用 React Hooks useState() 返回的 setData() 吗?

时间:2021-02-08 03:44:08

标签: javascript reactjs react-hooks

下面只是获取时间并显示出来,并使用一个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() 始终显示 timeID0。我认为该函数是一个闭包,应该能够成功调用 setTimeID() 从而改变状态?

0 个答案:

没有答案