Вопрос проверяет понимание механизма повторного рендеринга в React и оптимизации производительности с помощью useMemo и React.memo.
В React при каждом рендере компонента все переменные, объявленные внутри него, создаются заново. Это касается и массивов, и объектов. Даже если содержимое массива не изменилось, создается новый объект с новой ссылкой в памяти.
Если такой массив передается как пропс дочернему компоненту, обернутому в React.memo, то мемоизация не сработает. React.memo сравнивает пропсы поверхностно (shallow comparison), то есть по ссылке. Новая ссылка будет расценена как изменение, и дочерний компонент перерендерится, даже если данные не изменились.
// Плохо: новый массив при каждом рендере
function Parent() {
const items = ['a', 'b', 'c']; // новая ссылка каждый раз
return <Child list={items} />;
}
// Хорошо: мемоизация массива
function Parent() {
const items = useMemo(() => ['a', 'b', 'c'], []);
return <Child list={items} />;
}Проблема становится заметной при большом количестве дочерних компонентов, сложных вычислениях в них или частых ререндерах родителя. В простых приложениях это может быть незаметно, но в крупных проектах лишние ререндеры могут существенно замедлить работу.
Используйте useMemo для стабильных массивов и объектов, которые передаются как пропсы в мемоизированные компоненты. Это предотвращает лишние ререндеры и улучшает производительность приложения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию