Как можно остановить интервал?
Асинхронность и Event Loop
Интервал, запущенный через `setInterval`, останавливают функцией `clearInterval`, передав ей id, который вернул `setInterval`.
Как остановить
const intervalId = setInterval(() => {
console.log('тик');
}, 1000);
clearInterval(intervalId); // остановитьsetInterval возвращает идентификатор, который передаётся в clearInterval.
Остановка по условию
let count = 0;
const id = setInterval(() => {
count++;
console.log(count);
if (count >= 5) clearInterval(id); // остановить изнутри
}, 1000);В React — очистка при размонтировании
Обязательно очищать интервал в useEffect, иначе утечка памяти и обновление размонтированного компонента:
useEffect(() => {
const id = setInterval(tick, 1000);
return () => clearInterval(id); // очистка
}, []);Детали
- Без
clearIntervalинтервал работает бесконечно. - Потеря id (переопределение переменной) делает интервал неостановимым.
- Альтернатива для точности — рекурсивный
setTimeoutсclearTimeout.
Коротко для собеседования
Интервал останавливают через clearInterval(id), где id — возврат setInterval. Останавливать можно и изнутри по условию. В React обязательно чистить в useEffect (return () => clearInterval(id)), иначе утечка. Потеря id делает интервал неостановимым.