Назад к вопросам
Middle+
6
Проблемы с таймером в setup() компонента Vue с поддержкой SSR, который очищается в onUnmounted
Компании, где спрашивали
Employcity
Ответ от нейросети
sobes.tech AI
При использовании таймеров в setup() компонента Vue с SSR важно учитывать, что на сервере нет DOM и таймеры могут вести себя иначе. Если таймер создаётся в setup() и очищается в onUnmounted, то при серверном рендеринге onUnmounted не вызывается, так как компонент не монтируется в браузере.
Из-за этого таймер может не очищаться корректно, что приводит к утечкам или ошибкам.
Рекомендации:
- Проверять, что код с таймерами выполняется только на клиенте, например, через
if (typeof window !== 'undefined'). - Использовать
onBeforeUnmountилиonUnmountedдля очистки таймеров, но только в клиентской части. - Для SSR можно отложить создание таймера до хука
onMounted, который не вызывается на сервере.
Пример:
import { onMounted, onUnmounted, ref } from 'vue';
export default {
setup() {
let timer = null;
onMounted(() => {
timer = setInterval(() => {
console.log('tick');
}, 1000);
});
onUnmounted(() => {
clearInterval(timer);
});
}
}
Такой подход гарантирует, что таймеры создаются и очищаются только на клиенте, избегая проблем с SSR.