Вопрос проверяет понимание оптимизации рендеринга в React и знание методов жизненного цикла классовых компонентов.
В React классовые компоненты имеют метод жизненного цикла shouldComponentUpdate, который вызывается перед рендерингом, когда компонент получает новые пропсы или состояние. Этот метод возвращает true (по умолчанию) или false. Если он возвращает false, рендеринг и последующие методы жизненного цикла пропускаются. Это позволяет оптимизировать производительность, избегая ненужных обновлений.
React.memo — это функция высшего порядка для функциональных компонентов. Она оборачивает компонент и выполняет поверхностное сравнение предыдущих и новых пропсов. Если пропсы не изменились, компонент не перерендеривается. По сути, React.memo автоматически реализует логику shouldComponentUpdate с поверхностным сравнением.
Классовый компонент с shouldComponentUpdate:
class MyComponent extends React.Component {
shouldComponentUpdate(nextProps) {
// Сравниваем только нужные пропсы
return nextProps.value !== this.props.value;
}
render() {
return <div>{this.props.value}</div>;
}
}Функциональный компонент с React.memo:
const MyComponent = React.memo(({ value }) => {
return <div>{value}</div>
});
// По умолчанию поверхностное сравнение пропсовЕсли нужно кастомное сравнение, React.memo принимает второй аргумент — функцию сравнения:
const MyComponent = React.memo(
({ value }) => <div>{value}</div>,
(prevProps, nextProps) => prevProps.value === nextProps.value
);Используйте shouldComponentUpdate в классовых компонентах и React.memo в функциональных для предотвращения лишних рендеров, когда пропсы редко меняются. Это особенно полезно для компонентов, которые рендерят тяжелые элементы или часто обновляются.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию