πŸ”„ React Optimization & Advanced Concepts
Estimated reading: 4 minutes 243 views

React.memo for Component Memoization – Optimize React Renders (2025 Guide)


Introduction – Why Use React.memo?

React.js re-renders components by default whenever a parent re-rendersβ€”even if the child’s props haven’t changed. This behavior is often unnecessary and can slow down your app.

React.memo helps prevent unwanted re-renders by memoizing functional components. If the props stay the same, React skips rendering that component entirely.

In this guide, you’ll learn:

  • What React.memo does and how it works
  • Real-world usage examples
  • How to combine it with useCallback and useMemo
  • Best practices and common pitfalls

What is React.memo?

React.memo is a higher-order component that wraps a functional component and memoizes it based on its props.

Syntax:

const MemoizedComponent = React.memo(MyComponent);

Works like PureComponent for class components
Skips rendering unless props change


1. Basic Example

const Message = React.memo(({ text }) => {
  console.log('Rendered:', text);
  return <p>{text}</p>;
});

Used in a parent:

function Parent() {
  const [count, setCount] = useState(0);

  return (
    <>
      <Message text="Hello!" />
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </>
  );
}

Message doesn’t re-render when count updates
Saves unnecessary renders


2. Custom Comparison Function

By default, React.memo does a shallow comparison of props. For complex or nested objects, you can supply a custom function:

const areEqual = (prevProps, nextProps) => {
  return prevProps.user.id === nextProps.user.id;
};

const UserProfile = React.memo(({ user }) => {
  return <h3>{user.name}</h3>;
}, areEqual);

Prevents re-renders if deeply nested values don’t change


3. Combine with useCallback for Props

Passing inline functions as props will break memoization unless you memoize them with useCallback.

Bad:

<Child onClick={() => console.log('clicked')} />

Good:

const handleClick = useCallback(() => {
  console.log('clicked');
}, []);
<Child onClick={handleClick} />

React.memo + useCallback = optimized child rendering


4. When NOT to Use React.memo

SituationReason
Component renders infrequentlyMemoization overhead may not be worth it
Props change on every renderMemoization won’t help
Component is very simple (1–2 lines)Not worth complexity

5. Debug Re-Renders with why-did-you-render

Install this development-only library to inspect memo effectiveness:

npm install @welldone-software/why-did-you-render

Usage:

import React from 'react';

if (process.env.NODE_ENV === 'development') {
  const whyDidYouRender = require('@welldone-software/why-did-you-render');
  whyDidYouRender(React, { trackAllPureComponents: true });
}

Tells you why a component rendered and whether React.memo helped


Best Practices

Use React.memo on:

  • Functional components with stable props
  • List items, avatars, icons, layout components

Always memoize callback props with useCallback
Avoid inline objects or functions as props
Use React.memo selectivelyβ€”profile first


Summary – Recap & Next Steps

React.memo is a powerful tool to prevent unnecessary re-renders and optimize performance. It works best when components:

  • Receive stable props
  • Are pure (no internal state or side effects)
  • Are frequently re-rendered due to parent updates

Key Takeaways:

  • Wrap functional components with React.memo() to skip renders
  • Use useCallback to memoize function props
  • Use a custom comparison function for deep props
  • Profile before optimizingβ€”don’t overuse memoization

Real-World Relevance:
Used in production React apps to optimize component-heavy UIs, chat systems, forms, dashboards, and data tables.


FAQ Section

What does React.memo do?
It memoizes a component’s render output and prevents re-rendering when props haven’t changed.


Does React.memo work for class components?
No. For class components, use PureComponent.


Can I memoize a component with children?
Yes, but memoization only works on props, not internal state or side effects.


What breaks memoization in React.memo?
Passing inline objects/functions or props that change identity on each render.


Is React.memo always better?
No. If the component renders infrequently or props change often, React.memo may hurt performance due to extra comparisons.


Share Now :
Share

πŸ” React.memo for Component Memoization

Or Copy Link

CONTENTS
Scroll to Top