Row selection enables bulk actions.
Selection modes:
- Single: Radio button behavior
- Multiple: Checkbox behavior
- Range: Shift+click selects range
State management:
// Use Set for O(1) lookup
const [selectedIds, setSelectedIds] = useState(new Set());
const toggleRow = (id) => {
setSelectedIds(prev => {
const next = new Set(prev);
next.has(id) ? next.delete(id) : next.add(id);
return next;
});
};
Select all: Select all visible (filtered) rows, not all data.
Indeterminate state: Header checkbox shows indeterminate when some selected.