Loading...
Loading...
React.memo is a higher order function (HOC) in React that allows memoizing functional components.
It prevents unnecessary re-renders if props haven't changed.
When you wrap component in React.memo, React compares current and previous props (by default — shallowly) and skips re-render if they remained the same.
const MyComponent = React.memo((props) => {
// component
});
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>
</>
);
}
Even when clicking +1, Button will re-render because new onClick function is created at every render.
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>
</>
);
}
Now Button doesn't re-render if handleClick hasn't changed.
Useful if:
Not needed if:
Props are always different (e.g., function created anew every time without useCallback)If you need to control comparison manually:
React.memo(Component, (prevProps, nextProps) => {
return prevProps.value === nextProps.value;
});
Conclusion:
React.memo helps optimize performance by avoiding unnecessary component re-renders if their props haven't changed. But it should be used thoughtfully and when needed.