Careeroza
Real World Example
Real World: Task list with many rows (Trello, Todoist)
Each row is memoized. Passing stable handlers means toggling one task re-renders only that row, not all 500.
const TaskRow = memo(function TaskRow({ task, onToggle }) {
return <li onClick={() => onToggle(task.id)}>{task.done ? '✅' : '⬜'} {task.title}</li>;
});
function TaskList({ initial }) {
const [tasks, setTasks] = useState(initial);
const onToggle = useCallback((id) => {
setTasks((list) => list.map((t) => (t.id === id ? { ...t, done: !t.done } : t)));
}, []);
return <ul>{tasks.map((t) => <TaskRow key={t.id} task={t} onToggle={onToggle} />)}</ul>;
}