Use setinterval in React

廉价感情. 提交于 2020-01-25 08:53:07

问题


I'm trying to use setInterval in React but stuck on something I don't properly understand.

The code is:

const Countdown = () => {
   const [countdownSecond, setCountdownSecond] = React.useState(0);
   function x() {
      console.log(countdownSecond);
      setCountdownSecond(countdownSecond + 1);
   }

  return (
    <>
      <button onClick={() => setInterval(x, 1000)}>Start</button>
          {countdownSecond}
    </>
  );
}

The issue is that console always logs to 0. I'm not sure why is that. What concept am I misunderstanding?


回答1:


You can do:

const Countdown = () => {
   const [countdownSecond, setCountdownSecond] = React.useState(0);
   const [start, setStart] = React.useState(false);

   React.useEffect(()=>{
       const interval = null
       if (start) {
           interval = setInterval(()=>{
               setCountdownSecond(countdownSecond + 1);
           }, 1000);
       }
       return ()=>{if (interval !== null) clearInterval(interval)};
   },[start]);

   function x(e) {
      e.preventDefault();
      console.log(countdownSecond);
      setStart(!start);
   }

  return (
    <>
      <button onClick={(e) => x(e)}>{start?"Stop":"Start"}</button>
      <p>Countdown:&nbsp;{countdownSecond}</p>
    </>
  );
}


来源:https://stackoverflow.com/questions/58567640/use-setinterval-in-react

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!