Встречается на собеседованиях • сегодня
Как решить проблему утечек памяти в useEffect
При утечках памяти в useEffect важно отменять подписки, таймеры и асинхронные операции при размонтировании компонента.
Пример с подпиской:
jsx
useEffect(() => {
const subscription = someObservable.subscribe(handleData);
return () => subscription.unsubscribe(); // Очистка
}, []);Пример с fetch:
jsx
useEffect(() => {
let isMounted = true;
fetchData().then(data => {
if (isMounted) setData(data);
});
return () => { isMounted = false; }; // Отмена обновления
}, []);Что делать:
- Всегда возвращайте функцию очистки, если эффект создаёт подписки, таймеры (
setInterval/setTimeout) или запросы. - Для асинхронных операций используйте флаги (
isMounted) илиAbortController. - Избегайте сохранения данных в глобальные переменные или объекты вне компонента.
Ошибка:
jsx
useEffect(() => {
setTimeout(() => setState(1), 1000); // Таймер не очищен!
}, []);
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы