Skip to content
intermediate

Optimizing Re-renders with React.memo

Learn how to prevent unnecessary re-renders using React.memo to optimize component performance in a simple counter application.

import { ____, useState } from 'react';

interface ItemListProps {
  items: string[];
}

// Wrap this component to prevent unnecessary re-renders
const ItemList = ____(({ items }: ItemListProps) => {
  console.log('ItemList rendered');
  return (
    <div>
      <h3>Items:</h3>
      <ul>
        {items.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
    </div>
  );
});

interface ExpensiveDisplayProps {
  value: number;
}

// This component does an expensive calculation
const ExpensiveDisplay = ____(({ value }: ExpensiveDisplayProps) => {
  console.log('ExpensiveDisplay rendered');
  
  // Simulate expensive calculation
  let result = value;
  for (let i = 0; i < 1000000; i++) {
    result += 0.0001;
  }
  
  return <div>Processed value: {result.toFixed(2)}</div>;
});

export default function CounterApp() {
  const [count, setCount] = useState(0);
  const [items] = useState(['Apple', 'Banana', 'Cherry']);
  const [fixedValue] = useState(100);

  return (
    <div>
      <h1>Counter: {count}</h1>
      <button onClick={() => setCount(count + 1)}>Increment</button>
      <ItemList items={items} />
      <ExpensiveDisplay value={fixedValue} />
    </div>
  );
}
0/3 filled tab moves · Ctrl+↵ submits · Ctrl+Shift+↵ runsstarter code