reactjs - 如果 REACT 中运行了任何先前的 setInterval,如何清除Interval?

标签 reactjs setinterval clearinterval

我想制作一个反向倒数计时器,其中有一个输入字段,当我输入数字并按“Enter”键时,倒计时开始。但问题是,当我想停止前一个间隔并使用新数字开始新间隔并按 Enter 键时,它与前一个间隔并行运行。

我对 react 还很陌生,有人能给我一些建议来解决这个问题吗?

import React, {useState} from "react";

const App = () => {

  const [ctime, setctime]=useState();
 
  const enterdown=(value)=>{

      clearInterval(interval);

      setctime(value);
      var interval =  setInterval(()=>{
        value--;
        if(value==0){
          clearInterval(interval);
        }
        setctime(value);
      },1000)
  }
  return (
    <div className="wrapper">
      <div id="whole-center">
        <h1>
          Reverse countdown for<input id="timeCount" onKeyDown={(e)=>{e.key == "Enter" ?(enterdown(e.target.value)) :null}} /> sec.
        </h1>
      </div>
      <div id="current-time">{ctime}</div>  
    </div>
  )
}


export default App;

最佳答案

使用这个constinterval = useRef();而不是varinterval

完整的工作代码: 还有codesandbox链接:https://codesandbox.io/s/zealous-monad-thhrvz?file=/src/App.js

const App = () => {
  const interval = useRef();
  const [ctime, setctime] = useState();

  const enterdown = (value) => {
    clearInterval(interval.current);

    setctime(value);
    interval.current = setInterval(() => {
      value--;
      if (value == 0) {
        clearInterval(interval.current);
      }
      setctime(value);
    }, 1000);
  };
  return (
    <div className="wrapper">
      <div id="whole-center">
        <h1>
          Reverse countdown for
          <input
            id="timeCount"
            onKeyDown={(e) => {
              e.key == "Enter" ? enterdown(e.target.value) : null;
            }}
          />{" "}
          sec.
        </h1>
      </div>
      <div id="current-time">{ctime}</div>
    </div>
  );
};

关于reactjs - 如果 REACT 中运行了任何先前的 setInterval,如何清除Interval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71819882/

相关文章:

javascript - React .scrollLeft 无法读取空值

javascript - 在 React 中单击另一个组件中的按钮后如何显示模态?

Javascript setTimeout 运行两次?

javascript - clearInterval() 不适用于使用 JavaScript 的时钟计时器

javascript - jquery 移动 + 间隔 : can't stop running in the background

javascript - clearInterval() 如何清除 setInterval() 中的 timerID?

javascript - 功能组件数据在 Framer Preview 中更新时不会重新渲染

javascript - 如果元素为空,如何不渲染它?

javascript - 允许在 nodejs 中每毫秒运行一次以上 setInterval

javascript - 停止 setInterval 并执行其余代码