Проверяет понимание управления жизненным циклом компонентов и предотвращения утечек памяти при работе с подписками и таймерами.
Когда компонент подписывается на глобальные события (например, scroll на window) или запускает таймеры (setInterval, setTimeout), эти операции создают ссылки на функции, которые могут обращаться к состоянию или DOM компонента. Если компонент удаляется из дерева, но подписка или таймер не очищены, они продолжают существовать в памяти, удерживая компонент и его зависимости. Это приводит к утечкам памяти, снижению производительности и возможным ошибкам при попытке обновить состояние размонтированного компонента.
В классовых компонентах для очистки используется метод componentWillUnmount. В нём нужно удалить все подписки и остановить таймеры.
class MyComponent extends React.Component {
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
this.timer = setInterval(this.tick, 1000);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
clearInterval(this.timer);
}
handleScroll = () => { /* ... */ };
tick = () => { /* ... */ };
}В функциональных компонентах используется хук useEffect. Если вернуть функцию из useEffect, она будет вызвана при размонтировании компонента (или перед повторным запуском эффекта).
import { useEffect } from 'react';
function MyComponent() {
useEffect(() => {
const handleScroll = () => { /* ... */ };
window.addEventListener('scroll', handleScroll);
const timer = setInterval(() => { /* ... */ }, 1000);
return () => {
window.removeEventListener('scroll', handleScroll);
clearInterval(timer);
};
}, []); // пустой массив зависимостей — эффект выполнится один раз
}Правильная очистка ресурсов — обязательная практика при работе с глобальными событиями и таймерами. Это предотвращает утечки памяти и делает приложение стабильным и производительным. Всегда используйте механизмы очистки, предоставляемые React, чтобы избежать неожиданного поведения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию