Що таке React.memo і навіщо він потрібен
React.memo — це вища функція (HOC) в React, яка дозволяє мемоізувати функціональні компоненти.
Вона запобігає непотрібним повторним рендерингам, якщо пропси не змінилися.
Як працює React.memo?
Коли ви обгортаєте компонент у React.memo, React порівнює поточні та попередні пропси (за замовчуванням — поверхнево) і пропускає повторний рендер, якщо вони залишилися незмінними.
Синтаксис
const MyComponent = React.memo((props) => {
// компонент
});Приклад: без React.memo
const Button = ({ onClick }) => {
console.log("🔁 Button rendered");
return <button onClick={onClick}>Click me</button>;
};
function App() {
const [count, setCount] = useState(0);
return (
<>
<Button onClick={() => console.log("clicked")} />
<button onClick={() => setCount(count + 1)}>+1</button>
</>
);
}Навіть при натисканні +1, Button буде повторно рендеритися, оскільки нова функція onClick створюється при кожному рендері.
З React.memo + useCallback
const Button = React.memo(({ onClick }) => {
console.log("✅ Button rendered");
return <button onClick={onClick}>Click me</button>;
});
function App() {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
console.log("clicked");
}, []);
return (
<>
<Button onClick={handleClick} />
<button onClick={() => setCount(count + 1)}>+1</button>
</>
);
}Тепер Button не буде повторно рендеритися, якщо handleClick не змінився.
Коли використовувати React.memo?
Корисно, якщо:
- Компонент часто отримує однакові пропси
- Це обчислювально важкий компонент (наприклад, містить вкладені списки, графіки)
- Ви хочете уникнути непотрібних повторних рендерів
Не потрібно, якщо:
- Компонент малий і простий
Propsзавжди різні (наприклад, функція створюється заново кожного разу безuseCallback)- Немає проблем з продуктивністю
Користувацьке порівняння пропсів
Якщо вам потрібно контролювати порівняння вручну:
React.memo(Component, (prevProps, nextProps) => {
return prevProps.value === nextProps.value;
});Висновок:
React.memo допомагає оптимізувати продуктивність, уникаючи непотрібних повторних рендерів компонентів, якщо їх пропси не змінилися. Але його слід використовувати обережно і за потреби.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.