Sobes.tech
Назад к вопросам
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.