Sobes.tech
Middle+

SSR desteği olan Vue bileşeninin setup() içindeki zamanlayıcıyla ilgili sorunlar, onUnmounted'ta temizleniyor

sobes.tech yapay zeka

AI'dan gelen yanıt

При использовании таймеров в 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.