不能停止间隔

can not stop interval

我有一个使用 setTimeout 每秒更新时间的状态,但我无法使用 ClearTimeout 清除它。当我打印 timerClear 值时,它显示不同的值。

var timerClear ;

const [MyTime, setMyTime] = useState('');

useEffect(() => {
  timerClear = setInterval(() => {
     setMyTime(
       realeTime.toLocaleTimeString([], {
       timeZone: "Asia/Tehran",
       hour: '2-digit',
       minute: '2-digit',
       second: '2-digit',
       hour12: false,
       }),
     );

     checkTime();

  }, 1000);
}, [MyTime]);

在check函数中,如果时间达到了想要的值,我就清空所有的定时器

if (filterGetTime > filterEndTime) {
   if (data.examParents[0].examParent_method == "0") { 
      console.log('timerClear',timerClear);
                    
      alert('زمان امتحان تمام شده است!!!');
      if(sendReqDelay){
         clearTimeout(sendReqDelay);
      }
      clearTimeout(setTimeToPageTimeOut);
      clearTimeout(TimerIntervalSolveQuestions);
      clearInterval(timerClear);
   } 
             
}

每次在 Alert 中确认按钮后

alert('زمان امتحان تمام شده است!!!');
console.log('timerClear',timerClear);

打印另一个数字。

由于依赖数组 [MyTime] 每次 MyTime 更改,您正在创建一个新的间隔,并且对旧间隔的引用丢失。有了这样的设置,你最好使用 setTimeout.

此外,由于您有一个普通变量,它会在每次重新渲染时重新声明。
如果你打算使用 setInterval 你应该使用 useRef 来保持对它的引用并从依赖数组中删除 MyTime


大致如下:

const timerClear = useRef() ;
const [myTime, setMyTime] = useState('');

useEffect(() => {
  timerClear.current = setInterval(() => {
     setMyTime(
        // ...
     );
  }, 1000);
  return () => clearInterval(timeClear.current);
}, []);