Проверяет понимание проблемы стабильности ссылок на массивы в JavaScript и способов предотвращения лишних вызовов useEffect в React.
В React, если вы задаете дефолтное значение пропса как массив (например, items = []), то при каждом рендере компонента создается новый массив. Это происходит потому, что литерал массива в параметрах функции создает новый объект каждый раз. Когда вы передаете этот массив в зависимости useEffect, React сравнивает ссылки на массивы, а не их содержимое. Так как ссылка меняется, эффект будет выполняться после каждого рендера, даже если данные не изменились.
Чтобы стабилизировать ссылку, можно использовать useMemo для мемоизации массива. Например:
const defaultItems = useMemo(() => [], []);
function MyComponent({ items = defaultItems }) {
useEffect(() => {
// логика
}, [items]);
}Теперь ссылка на массив остается постоянной между рендерами, и эффект сработает только при реальном изменении пропса.
useRef для хранения предыдущего значения и сравнения вручную.Стабилизация ссылок на массивы критична для корректной работы useEffect. Используйте useMemo или константы вне компонента, чтобы избежать лишних срабатываний и улучшить производительность приложения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию