React.memo — это компонент высшего порядка, который мемоизирует функциональные компоненты, предотвращая ненужные повторные рендеры, когда свойства не изменились. Это встроенный инструмент оптимизации React для повышения производительности.
Синтаксис: const MemoizedComponent = React.memo(Component);
Ключевые преимущества:
Простой пример:
const UserCard = React.memo(function UserCard({ name, avatar }) {
return (
<div>
<img src={avatar} alt={name} />
<span>{name}</span>
</div>
);
});React.memo — это мощная техника оптимизации, которая помогает повысить производительность React-приложений, предотвращая ненужные повторные рендеры компонентов с неизмененными свойствами. Особенно полезен в больших приложениях со сложными деревьями компонентов.
React.memo работает путем мемоизации результата рендера компонента. Когда родительский компонент повторно рендерится:
Идеально подходит для элементов списков, которые редко изменяются, но родительский компонент часто перерисовывается.
Компоненты со сложными вычислениями или тяжелой логикой рендеринга, которые выигрывают от кэширования.
Компоненты, отображающие статические данные и редко получающие новые свойства.
Компоненты, получающие простые свойства, такие как строки, числа или булевы значения.
// Простая мемоизация
const ProductItem = React.memo(function ProductItem({ title, price }) {
return (
<div>
<h3>{title}</h3>
<p>${price}</p>
</div>
);
});
// С пользовательским сравнением
const TodoItem = React.memo(
function TodoItem({ todo, onUpdate }) {
return (
<div>
<input
type="checkbox"
checked={todo.completed}
onChange={() => onUpdate(todo.id)}
/>
<span>{todo.text}</span>
</div>
);
},
(prevProps, nextProps) => {
// Пользовательская логика сравнения
return (
prevProps.todo.id === nextProps.todo.id &&
prevProps.todo.completed === nextProps.todo.completed &&
prevProps.todo.text === nextProps.todo.text
);
}
);✅ Лучше всего подходит для:
❌ Следует избегать для:
React.memo — важный инструмент для оптимизации производительности React. При правильном использовании он может значительно улучшить отзывчивость приложения, устраняя ресурсоемкие повторные рендеры и сохраняя простоту кода.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪