Capítulo 17 de 54
A "header group" is just one row of headers — most tables have exactly one, but nested/grouped columns produce multiple header rows (multiple header groups), one per depth level.
table.getHeaderGroups() (most common); with column pinning enabled, use table.get[Start/Center/End]HeaderGroups() for the pinned/center subsets.id (derived from depth, stable React key), depth (zero-indexed header row index), headers (the array of Header objects in that row).headerGroup.headers, giving each <th> a colSpan={header.colSpan}.<thead>
{table.getHeaderGroups().map((headerGroup) => (
<tr key={headerGroup.id}>
{headerGroup.headers.map((header) => (
<th key={header.id} colSpan={header.colSpan}>{/* ... */}</th>
))}
</tr>
))}
</thead>
<thead> in this library follows, regardless of how many header rows exist.<thead> and a multi-row grouped <thead> use the exact same rendering code — table.getHeaderGroups() just returns one entry vs. several.header.colSpan on the <th>, even for single-row tables — grouped columns depend on it, and it's a no-op (1) otherwise.Header objects inside headerGroup.headers, including rowSpan for uneven column trees.columnHelper.group(...) is what produces multiple header groups.