В примере не очищаются resize, keydown и interval, поэтому после размонтирования остаются обработчики и периодическая синхронизация.
const userStore = useUserStore()
В примере не очищаются resize, keydown и interval, поэтому после размонтирования остаются обработчики и периодическая синхронизация.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
const userStore = useUserStore()
onMounted(() => { window.addEventListener('resize', handleResize)
const interval = setInterval(() => { userStore.syncData() }, 5000)
document.addEventListener('keydown', handleKeydown)
function handleResize() { /* ... / } function handleKeydown() { / ... */ } })
Ответ
В примере не очищаются resize, keydown и interval, поэтому после размонтирования остаются обработчики и периодическая синхронизация.
Перенесите ссылки на функции и таймер в setup-область и зарегистрируйте cleanup:
const userStore = useUserStore();
let interval;
function handleResize() { /* обработка размера */ }
function handleKeydown() { /* обработка клавиатуры */ }
onMounted(() => {
window.addEventListener('resize', handleResize);
document.addEventListener('keydown', handleKeydown);
interval = setInterval(() => userStore.syncData(), 5000);
});
onUnmounted(() => {
window.removeEventListener('resize', handleResize);
document.removeEventListener('keydown', handleKeydown);
clearInterval(interval);
});
Если syncData асинхронна, дополнительно обрабатывайте её ошибки и не допускайте перекрытия долгих запросов.