React Performance

Performance Optimization

React.memo, useMemo, useCallback, lazy loading, code splitting, and profiling.

Advertisement

Performance Optimization

React.memo, useMemo, useCallback, lazy loading, code splitting, and profiling.

Overview

Optimizing React apps prevents unnecessary re-renders and improves user experience.

Key Concepts

  • React.memo — Memoizes component to skip re-renders when props haven't changed
  • useMemo — Memoizes expensive calculations
  • useCallback — Memoizes functions to prevent child re-renders
  • React.lazy — Lazy-loads components for code splitting
  • Profiler — Measures rendering performance

Code Examples

import { memo, useMemo, useCallback, lazy, Suspense } from 'react';

const HeavyComponent = lazy(() => import('./HeavyComponent'));

const MemoizedList = memo(function List({ items, onSelect }) {
  return (
    <ul>
      {items.map(item => (
        <li key={item.id} onClick={() => onSelect(item.id)}>
          {item.name}
        </li>
      ))}
    </ul>
  );
});

function App() {
  const [filter, setFilter] = useState('');
  const items = useMemo(() => 
    allItems.filter(item => 
      item.name.toLowerCase().includes(filter.toLowerCase())
    ), [filter]);

  const handleSelect = useCallback((id) => {
    console.log('Selected:', id);
  }, []);

  return (
    <Suspense fallback={<div>Loading...</div>}>
      <MemoizedList items={items} onSelect={handleSelect} />
    </Suspense>
  );
}

Practice

Profile a list component and optimize it to prevent re-renders on unrelated state changes.