Вопрос проверяет понимание типичных причин падения производительности React-приложений и умение их распознавать в реальном коде.
Производительность React в первую очередь страдает не от самого Virtual DOM, а от того, как часто и насколько широко происходят ре-рендеры. React по умолчанию перерисовывает компонент и всё его поддерево при изменении состояния или пропсов родителя, даже если данные ребёнка не поменялись. Если это происходит на верхнем уровне большого дерева, страдает вся страница.
function Parent() {
const [count, setCount] = useState(0);
// новый объект на каждом рендере — memo бесполезен
const config = { theme: 'dark' };
return <Child config={config} onClick={() => setCount(count + 1)} />;
}
const Child = React.memo(function Child({ config, onClick }) {
console.log('render Child');
return <button onClick={onClick}>{config.theme}</button>;
});
Здесь React.memo не спасёт: объект config и функция onClick создаются заново при каждом рендере, поэтому ссылки меняются и Child перерисовывается. Исправляется через useMemo и useCallback.
useMemo, useCallback, React.memo.Итог: оптимизацию стоит применять там, где профилирование (React DevTools Profiler) показывает реальные лишние ре-рендеры или тяжёлые вычисления, а не повсеместно — преждевременная мемоизация усложняет код без выгоды.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию