Вопрос проверяет знание механизмов оптимизации производительности React, а именно предотвращения ненужных повторных рендеров дочерних компонентов.
В React при обновлении состояния родительского компонента все его дочерние компоненты по умолчанию перерендериваются, даже если их пропсы не изменились. Это может привести к снижению производительности, особенно в глубоких деревьях компонентов или при тяжелых вычислениях.
import React, { useState, useMemo, useCallback } from 'react';
const Child = React.memo(({ onClick, data }) => {
console.log('Child render');
return <button onClick={onClick}>{data.value}</button>;
});
function Parent() {
const [count, setCount] = useState(0);
const [other, setOther] = useState(0);
// useMemo для стабильного объекта
const data = useMemo(() => ({ value: count }), [count]);
// useCallback для стабильной функции
const handleClick = useCallback(() => {
setCount(c => c + 1);
}, []);
return (
<div>
<Child onClick={handleClick} data={data} />
<button onClick={() => setOther(o => o + 1)}>Other: {other}</button>
</div>
);
}В этом примере Child обёрнут в React.memo, а пропсы data и onClick стабильны благодаря useMemo и useCallback. При изменении other Child не перерендерится.
Вывод: Применяйте React.memo, useMemo и useCallback осознанно, только когда профилирование показывает проблему производительности. Избыточная мемоизация может усложнить код и не дать выигрыша.
Уровень
Рейтинг:
5
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию