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

Как правильно очистить один из таймаутов?

Есть код вида:
componentDidMount() {
  this.foo = () = {

    //some code

    setTimeout(func, 1);
  };
};

componentWillUnmount() {
  setTimeout(func, 1);

  //some code

  this.foo();
}

Как правильно очистить один из таймаутов, чтобы они не стакались, при этом оба раза функция была вызвана по прошествии интервала?
Если делаю так,
componentWillUnmount() {
  const timeout = setTimeout(func, 1);

  //some code

  clearTimeout(timeout);
  this.foo();
}

то таймаут очищается до того, как должна быть вызвана функция
  • Вопрос задан
  • 421 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Пример слишком синтетический.
componentWillUnmount как и componentDidMount гарантированно вызываются один раз.
Функция this.foo вызывается в componentWillUnmount без условий. Какой смысл разносить реализацию и выполнение? Скажи какую задачу решить пытаешся, тогда не прийдется костыли писать
componentDidMount() {
  this.foo = (timerToClear) = {

    //some code
    if (timerToClear) {
      clearTimeout(timerToClear);
    }
    setTimeout(func, 1);
  };
};

componentWillUnmount() {
  const timer = setTimeout(func, 1);

  //some code

  this.foo(timer);
}


Более реальный пример, когда ты садишь таймер на изменение стейта, но это красивее реализуется на хуке useEffect с очисткой
https://reactjs.org/docs/hooks-effect.html#effects...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽