React.memo
RE · useMemo & useCallbacksyntax
const MemoizedComponent = React.memo(Component);
// With custom comparison
const MemoizedComponent = React.memo(Component, (prevProps, nextProps) => {
return prevProps.id === nextProps.id;
});example
import { memo, useState, useCallback } from 'react';
const ExpensiveRow = memo(function ExpensiveRow({ item, onToggle }) {
// This component only re-renders if item or onToggle change
return (
<tr onClick={() => onToggle(item.id)}>
<td>{item.name}</td>
<td>{item.value.toFixed(2)}</td>
</tr>
);
});
function DataTable({ rows }) {
const [selected, setSelected] = useState(new Set());
const handleToggle = useCallback((id) => {
setSelected(prev => {
const next = new Set(prev);
next.has(id) ? next.delete(id) : next.add(id);
return next;
});
}, []);
return (
<table>
<tbody>
{rows.map(row => (
<ExpensiveRow key={row.id} item={row} onToggle={handleToggle} />
))}
</tbody>
</table>
);
}Note React.memo does a shallow comparison of props. It only helps if the component re-renders with the same props frequently. Pair it with useCallback for function props and useMemo for object/array props.