j-snow
@j-snow
Java junior developer

Как очищать таймер при демонтировании компонента?

Привет всем!

У меня есть компонент, написанный с использованием React Hooks.
При клике на него он запускает таймер.
Я хочу останавливать этот таймер при демонтировании компонента.
Использую для этого useEffect.

Код примерно такой:
function MyComponent() {
  const [timer, setTimer] = useState()
  
  useEffect(() => {
    return () => clearTimeout(timer) // timer всегда undefined
  }, [])
  
  return <a onClick={() => {
    setTimer(setTimeout(() => alert("Hi"), 5000))
  }}>Link</a>
}


Разумеется, код не работает, потому что в функции, возвращаемой из useEffect, заключена переменная timer, равная undefined.

Вопрос:
Как останавливать таймер при демонтировании компонента?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
useEffect(() => () => clearTimeout(timer), [ timer ]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы