Задать вопрос
@supkiler

Почему таймер ускоряется?

timer = (id) => {
  const xid = this.state.todo.findIndex((el) => el.id === id);
  const oldItem = this.state.todo[xid];
  
    
  const IntervalId = setInterval(() => {
    if (oldItem.sec > 0) {
      oldItem.sec--;
      console.log(oldItem.sec)
    } 
    else if ( oldItem.min === 0 && oldItem.sec === 0) {
      oldItem.min = 0;
      oldItem.sec = 0;
    } 
    else if (oldItem.sec === 0){
       if(oldItem.min > 0){
        oldItem.sec = 59;
        oldItem.min--;
      }
      
    }

    const secString = String(oldItem.sec).padStart(2, '0');
    const minString = String(oldItem.min).padStart(2, '0');

    this.setState(({ todo }) => {
      const newItem = {
        ...oldItem,
        min: minString,
        sec: secString,
        time: true,
        intervalId: IntervalId
      };
      const newstate = [
        ...todo.slice(0, xid),
        newItem,
        ...todo.slice(xid + 1)
      ];
      return {
        todo: newstate
      };
    });
  }, 1000);
 
    clearInterval(oldItem.intervalId); // Очищаем уже существующий интервал
  
}


stopTimer = (id) =>{
  
  const xid = this.state.todo.findIndex((el) => el.id === id);
    const oldItem = this.state.todo[xid]
      clearInterval(oldItem.intervalId);
    
    
    delete this.intervals
    
      this.setState(({ todo }) =>{
        const newItem = {...oldItem,
          time: false,
          }
          
          const newstate = [
            ...todo.slice(0,xid),
            newItem,
            ...todo.slice(xid + 1)
          ]
          return {
            todo: newstate
          }
      });
}


почему при когда несколько раз нажимаешь на таймер он ускоряется ?
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Я так понимаю, когда вы вызываете функцию timer, вы создаете новый интервал setInterval, но не очищаете предыдущий интервал. Из-за этого несколько интервалов работают одновременно, и таймер ускоряется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
22 янв. 2025, в 04:08
6000 руб./за проект
21 янв. 2025, в 23:55
20000 руб./за проект
21 янв. 2025, в 23:35
80000 руб./за проект