JS Guide
HomeQuestionsSearchResources
Search

Built for developers preparing for JavaScript, React & TypeScript interviews.

ResourcesQuestionsSupport
HomeQuestionsSearchProgress
HomeQuestionsreact
Next
react
senior
performance

Explain React.memo, useMemo, and useCallback. When should each be used?

memo
useMemo
useCallback
performance
optimization
Quick Answer

React.memo prevents component re-renders when props are unchanged. useMemo caches computed values. useCallback caches function references. Use them only when you have measured performance issues - premature optimization adds complexity without benefit.

Detailed Explanation

React.memo:

  • HOC that memoizes component output
  • Shallow compares props
  • Prevents re-render if props haven't changed
  • Can provide custom comparison function

useMemo:

  • Caches expensive computed values
  • Re-computes only when dependencies change
  • Returns the memoized value

useCallback:

  • Caches function references
  • Re-creates only when dependencies change
  • Returns the memoized function
  • Primarily useful when passing to memoized children

When to Use:

  • ✅ Expensive calculations (useMemo)
  • ✅ Referential equality needed for effects
  • ✅ Child components are memoized and receive callbacks
  • ❌ Simple components without performance issues
  • ❌ Functions not passed as props

Code Examples

React.memo usage
// Memoized component - only re-renders if props change
const ExpensiveList = React.memo(function ExpensiveList({ items, onItemClick }) {
  console.log('ExpensiveList rendered');
  return (
    <ul>
      {items.map(item => (
        <li key={item.id} onClick={() => onItemClick(item)}>
          {item.name}
        </li>
      ))}
    </ul>
  );
});

// With custom comparison
const UserCard = React.memo(
  function UserCard({ user, theme }) {
    return (
      <div className={theme}>
        {user.name}
      </div>
    );
  },
  (prevProps, nextProps) => {
    // Return true if props are equal (skip re-render)
    // Return false to re-render
    return prevProps.user.id === nextProps.user.id &&
           prevProps.theme === nextProps.theme;
  }
);

Resources

React Docs - useMemo

docs

React Docs - useCallback

docs

When to useMemo and useCallback

article

Related Questions

How does React's reconciliation algorithm work?

senior
internals
Next
How does React's reconciliation algorithm work?