@tanstack/table-core 9.0.0-alpha.47 → 9.0.0-alpha.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/core/cells/coreCellsFeature.utils.cjs +11 -8
- package/dist/core/cells/coreCellsFeature.utils.cjs.map +1 -1
- package/dist/core/cells/coreCellsFeature.utils.d.cts +11 -8
- package/dist/core/cells/coreCellsFeature.utils.d.ts +11 -8
- package/dist/core/cells/coreCellsFeature.utils.js +11 -8
- package/dist/core/cells/coreCellsFeature.utils.js.map +1 -1
- package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -6
- package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -6
- package/dist/core/columns/coreColumnsFeature.utils.cjs +37 -27
- package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
- package/dist/core/columns/coreColumnsFeature.utils.d.cts +37 -27
- package/dist/core/columns/coreColumnsFeature.utils.d.ts +37 -27
- package/dist/core/columns/coreColumnsFeature.utils.js +37 -27
- package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -4
- package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -4
- package/dist/core/headers/coreHeadersFeature.utils.cjs +23 -18
- package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.d.cts +23 -18
- package/dist/core/headers/coreHeadersFeature.utils.d.ts +23 -18
- package/dist/core/headers/coreHeadersFeature.utils.js +23 -18
- package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.utils.cjs +48 -36
- package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +48 -36
- package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +48 -36
- package/dist/core/row-models/coreRowModelsFeature.utils.js +48 -36
- package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
- package/dist/core/rows/coreRowsFeature.types.d.cts +4 -4
- package/dist/core/rows/coreRowsFeature.types.d.ts +4 -4
- package/dist/core/rows/coreRowsFeature.utils.cjs +34 -28
- package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
- package/dist/core/rows/coreRowsFeature.utils.d.cts +34 -28
- package/dist/core/rows/coreRowsFeature.utils.d.ts +34 -28
- package/dist/core/rows/coreRowsFeature.utils.js +34 -28
- package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
- package/dist/core/table/coreTablesFeature.types.d.cts +6 -2
- package/dist/core/table/coreTablesFeature.types.d.ts +6 -2
- package/dist/core/table/coreTablesFeature.utils.cjs +2 -2
- package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
- package/dist/core/table/coreTablesFeature.utils.d.cts +2 -2
- package/dist/core/table/coreTablesFeature.utils.d.ts +2 -2
- package/dist/core/table/coreTablesFeature.utils.js +2 -2
- package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +16 -10
- package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +16 -10
- package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +26 -18
- package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +26 -18
- package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +26 -18
- package/dist/features/column-faceting/columnFacetingFeature.utils.js +26 -18
- package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +21 -11
- package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +21 -11
- package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +39 -28
- package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +39 -28
- package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +39 -28
- package/dist/features/column-filtering/columnFilteringFeature.utils.js +39 -28
- package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +18 -14
- package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +18 -14
- package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +55 -43
- package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +55 -43
- package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +55 -43
- package/dist/features/column-grouping/columnGroupingFeature.utils.js +55 -43
- package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +14 -5
- package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +14 -5
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +30 -23
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +30 -23
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +30 -23
- package/dist/features/column-ordering/columnOrderingFeature.utils.js +30 -23
- package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.types.d.cts +43 -31
- package/dist/features/column-pinning/columnPinningFeature.types.d.ts +43 -31
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs +111 -91
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +111 -91
- package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +111 -91
- package/dist/features/column-pinning/columnPinningFeature.utils.js +111 -91
- package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.types.d.cts +9 -9
- package/dist/features/column-resizing/columnResizingFeature.types.d.ts +9 -9
- package/dist/features/column-resizing/columnResizingFeature.utils.cjs +28 -19
- package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +28 -19
- package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +28 -19
- package/dist/features/column-resizing/columnResizingFeature.utils.js +28 -19
- package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.types.d.cts +19 -12
- package/dist/features/column-sizing/columnSizingFeature.types.d.ts +19 -12
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs +52 -41
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +52 -41
- package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +52 -41
- package/dist/features/column-sizing/columnSizingFeature.utils.js +52 -41
- package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +16 -13
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +16 -13
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +54 -42
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +54 -42
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +54 -42
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js +54 -42
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +10 -5
- package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +10 -5
- package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +20 -14
- package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +20 -14
- package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +20 -14
- package/dist/features/global-filtering/globalFilteringFeature.utils.js +20 -14
- package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +16 -15
- package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +16 -15
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +56 -41
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +56 -41
- package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +56 -41
- package/dist/features/row-expanding/rowExpandingFeature.utils.js +56 -41
- package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +19 -12
- package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +19 -12
- package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +49 -32
- package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +49 -32
- package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +49 -32
- package/dist/features/row-pagination/rowPaginationFeature.utils.js +49 -32
- package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.types.d.cts +12 -8
- package/dist/features/row-pinning/rowPinningFeature.types.d.ts +12 -8
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs +39 -29
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +39 -29
- package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +39 -29
- package/dist/features/row-pinning/rowPinningFeature.utils.js +39 -29
- package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.types.d.cts +30 -24
- package/dist/features/row-selection/rowSelectionFeature.types.d.ts +30 -24
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs +89 -69
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +89 -69
- package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +89 -69
- package/dist/features/row-selection/rowSelectionFeature.utils.js +89 -69
- package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.types.d.cts +10 -8
- package/dist/features/row-sorting/rowSortingFeature.types.d.ts +10 -8
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs +61 -44
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +61 -44
- package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +61 -44
- package/dist/features/row-sorting/rowSortingFeature.utils.js +61 -44
- package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
- package/dist/fns/aggregationFns.cjs +33 -9
- package/dist/fns/aggregationFns.cjs.map +1 -1
- package/dist/fns/aggregationFns.d.cts +33 -9
- package/dist/fns/aggregationFns.d.ts +33 -9
- package/dist/fns/aggregationFns.js +33 -9
- package/dist/fns/aggregationFns.js.map +1 -1
- package/dist/fns/filterFns.cjs +48 -17
- package/dist/fns/filterFns.cjs.map +1 -1
- package/dist/fns/filterFns.d.cts +42 -15
- package/dist/fns/filterFns.d.ts +42 -15
- package/dist/fns/filterFns.js +48 -17
- package/dist/fns/filterFns.js.map +1 -1
- package/dist/helpers/columnHelper.cjs +9 -4
- package/dist/helpers/columnHelper.cjs.map +1 -1
- package/dist/helpers/columnHelper.d.cts +9 -4
- package/dist/helpers/columnHelper.d.ts +9 -4
- package/dist/helpers/columnHelper.js +9 -4
- package/dist/helpers/columnHelper.js.map +1 -1
- package/dist/helpers/tableOptions.cjs.map +1 -1
- package/dist/helpers/tableOptions.d.cts +12 -9
- package/dist/helpers/tableOptions.d.ts +12 -9
- package/dist/helpers/tableOptions.js.map +1 -1
- package/dist/types/ColumnDef.d.cts +38 -0
- package/dist/types/ColumnDef.d.ts +38 -0
- package/dist/types/TableOptions.d.cts +15 -0
- package/dist/types/TableOptions.d.ts +15 -0
- package/dist/types/TableState.d.cts +12 -0
- package/dist/types/TableState.d.ts +12 -0
- package/package.json +5 -3
- package/skills/column-definitions/SKILL.md +333 -0
- package/skills/column-layout/SKILL.md +328 -0
- package/skills/column-layout/references/subsystems.md +220 -0
- package/skills/customizing-feature-behavior/SKILL.md +416 -0
- package/skills/filtering/SKILL.md +357 -0
- package/skills/filtering/references/faceting-and-fuzzy.md +191 -0
- package/skills/grouping/SKILL.md +448 -0
- package/skills/migrate-v8-to-v9/SKILL.md +495 -0
- package/skills/pagination/SKILL.md +385 -0
- package/skills/row-expanding/SKILL.md +348 -0
- package/skills/row-pinning/SKILL.md +269 -0
- package/skills/row-selection/SKILL.md +391 -0
- package/skills/setup/SKILL.md +400 -0
- package/skills/sorting/SKILL.md +344 -0
- package/skills/state-management/SKILL.md +388 -0
- package/src/core/cells/coreCellsFeature.utils.ts +11 -8
- package/src/core/columns/coreColumnsFeature.types.ts +7 -6
- package/src/core/columns/coreColumnsFeature.utils.ts +37 -27
- package/src/core/headers/coreHeadersFeature.types.ts +6 -4
- package/src/core/headers/coreHeadersFeature.utils.ts +23 -18
- package/src/core/row-models/coreRowModelsFeature.utils.ts +48 -36
- package/src/core/rows/coreRowsFeature.types.ts +4 -4
- package/src/core/rows/coreRowsFeature.utils.ts +34 -28
- package/src/core/table/coreTablesFeature.types.ts +6 -2
- package/src/core/table/coreTablesFeature.utils.ts +2 -2
- package/src/features/column-faceting/columnFacetingFeature.types.ts +16 -10
- package/src/features/column-faceting/columnFacetingFeature.utils.ts +26 -18
- package/src/features/column-filtering/columnFilteringFeature.types.ts +21 -11
- package/src/features/column-filtering/columnFilteringFeature.utils.ts +39 -28
- package/src/features/column-grouping/columnGroupingFeature.types.ts +18 -14
- package/src/features/column-grouping/columnGroupingFeature.utils.ts +55 -43
- package/src/features/column-ordering/columnOrderingFeature.types.ts +14 -5
- package/src/features/column-ordering/columnOrderingFeature.utils.ts +30 -23
- package/src/features/column-pinning/columnPinningFeature.types.ts +43 -31
- package/src/features/column-pinning/columnPinningFeature.utils.ts +111 -91
- package/src/features/column-resizing/columnResizingFeature.types.ts +9 -9
- package/src/features/column-resizing/columnResizingFeature.utils.ts +28 -19
- package/src/features/column-sizing/columnSizingFeature.types.ts +19 -12
- package/src/features/column-sizing/columnSizingFeature.utils.ts +52 -41
- package/src/features/column-visibility/columnVisibilityFeature.types.ts +16 -13
- package/src/features/column-visibility/columnVisibilityFeature.utils.ts +54 -42
- package/src/features/global-filtering/globalFilteringFeature.types.ts +10 -5
- package/src/features/global-filtering/globalFilteringFeature.utils.ts +20 -14
- package/src/features/row-expanding/rowExpandingFeature.types.ts +16 -15
- package/src/features/row-expanding/rowExpandingFeature.utils.ts +56 -41
- package/src/features/row-pagination/rowPaginationFeature.types.ts +19 -12
- package/src/features/row-pagination/rowPaginationFeature.utils.ts +49 -32
- package/src/features/row-pinning/rowPinningFeature.types.ts +12 -8
- package/src/features/row-pinning/rowPinningFeature.utils.ts +39 -29
- package/src/features/row-selection/rowSelectionFeature.types.ts +30 -24
- package/src/features/row-selection/rowSelectionFeature.utils.ts +89 -69
- package/src/features/row-sorting/rowSortingFeature.types.ts +10 -8
- package/src/features/row-sorting/rowSortingFeature.utils.ts +61 -44
- package/src/fns/aggregationFns.ts +33 -9
- package/src/fns/filterFns.ts +48 -17
- package/src/helpers/columnHelper.ts +9 -4
- package/src/helpers/tableOptions.ts +12 -9
- package/src/types/ColumnDef.ts +38 -0
- package/src/types/TableOptions.ts +15 -0
- package/src/types/TableState.ts +12 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migrate-v8-to-v9
|
|
3
|
+
description: >
|
|
4
|
+
Mechanical breaking-change migration from TanStack Table v8 to v9 at the
|
|
5
|
+
`@tanstack/table-core` level. Covers hook/entry rename
|
|
6
|
+
(`useReactTable`/`createSolidTable`/… → `useTable`/`injectTable`/`createTable`/
|
|
7
|
+
`constructTable`), the new required `_features` + `_rowModels` options,
|
|
8
|
+
`createColumnHelper<TData>()` → `createColumnHelper<typeof _features, TData>()`,
|
|
9
|
+
row-model factory rename (`getCoreRowModel()` → automatic; `getSortedRowModel()`
|
|
10
|
+
→ `createSortedRowModel(sortFns)`; same for filtered/paginated/grouped/expanded/
|
|
11
|
+
faceted), `table.getState()` → `table.store.state` / `table.atoms.<slice>.get()`,
|
|
12
|
+
sorting renames (`sortingFn` → `sortFn`, etc.), `enablePinning` split, column
|
|
13
|
+
sizing/resizing split, underscore-prefixed APIs becoming public, `RowData`
|
|
14
|
+
type tightening, TFeatures-first generics, the `useLegacyTable` React escape
|
|
15
|
+
hatch (deprecated, removed in v10), and the `stockFeatures` v8-style "everything
|
|
16
|
+
on" registry.
|
|
17
|
+
type: lifecycle
|
|
18
|
+
library: tanstack-table
|
|
19
|
+
library_version: '9.0.0-alpha.47'
|
|
20
|
+
requires:
|
|
21
|
+
- setup
|
|
22
|
+
- state-management
|
|
23
|
+
- column-definitions
|
|
24
|
+
sources:
|
|
25
|
+
- TanStack/table:docs/framework/table-core/guide/migrating.md
|
|
26
|
+
- TanStack/table:docs/framework/react/guide/use-legacy-table.md
|
|
27
|
+
- TanStack/table:packages/react-table/src/legacy.ts
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Setup
|
|
31
|
+
|
|
32
|
+
v9 is a substantial reshape, not a tweak. The breaking changes group into:
|
|
33
|
+
|
|
34
|
+
1. **Hook/entry rename** per adapter.
|
|
35
|
+
2. **`_features` + `_rowModels` are required** — features are tree-shaken.
|
|
36
|
+
3. **Column helper generic order** — `<TFeatures, TData>` not `<TData>`.
|
|
37
|
+
4. **Row-model factories** moved out of root options, into `_rowModels`, and now take their `*Fns` argument.
|
|
38
|
+
5. **State surface renamed** — `table.getState()` → `table.store.state` / `table.atoms.<slice>.get()` / `table.state` (selector).
|
|
39
|
+
6. **Sorting names**: `sortingFn` → `sortFn`, `sortingFns` → `sortFns`, `getSortingFn()` → `getSortFn()`, type `SortingFn` → `SortFn`.
|
|
40
|
+
7. **`enablePinning` split** into `enableColumnPinning` + `enableRowPinning` (table-level); per-column `enablePinning` stays.
|
|
41
|
+
8. **Column resizing split out** of column sizing. `columnSizingInfo` state → `columnResizing`. `onColumnSizingInfoChange` → `onColumnResizingChange`.
|
|
42
|
+
9. **Underscore-prefixed APIs are public now** — drop the `_` prefix (`row._getAllCellsByColumnId()` → `row.getAllCellsByColumnId()`, `table._getFacetedRowModel()` → public, etc.).
|
|
43
|
+
10. **Generics now lead with `TFeatures`** — `Column<TFeatures, TData, TValue>`, `Row<TFeatures, TData>`, `ColumnMeta<TFeatures, TData, TValue>`.
|
|
44
|
+
11. **`RowData` tightened** from `unknown | object | any[]` to `Record<string, any> | Array<any>`.
|
|
45
|
+
12. **`data` and `columns` are readonly** in v9 — flow changes through state, don't mutate.
|
|
46
|
+
|
|
47
|
+
For React projects that cannot migrate every table at once, `useLegacyTable` from `@tanstack/react-table/legacy` accepts the v8 shape on top of the v9 engine. Deprecated, ships every feature, no `table.Subscribe`. Removed in v10.
|
|
48
|
+
|
|
49
|
+
## Core Patterns
|
|
50
|
+
|
|
51
|
+
### Full v9 equivalent for the most common v8 shape
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
// === v9 (correct) ===
|
|
55
|
+
import {
|
|
56
|
+
useTable,
|
|
57
|
+
tableFeatures,
|
|
58
|
+
rowSortingFeature,
|
|
59
|
+
rowPaginationFeature,
|
|
60
|
+
columnFilteringFeature,
|
|
61
|
+
columnSizingFeature,
|
|
62
|
+
columnResizingFeature,
|
|
63
|
+
createColumnHelper,
|
|
64
|
+
createSortedRowModel,
|
|
65
|
+
createFilteredRowModel,
|
|
66
|
+
createPaginatedRowModel,
|
|
67
|
+
sortFns,
|
|
68
|
+
filterFns,
|
|
69
|
+
} from '@tanstack/react-table'
|
|
70
|
+
import type { ColumnDef } from '@tanstack/react-table'
|
|
71
|
+
|
|
72
|
+
const _features = tableFeatures({
|
|
73
|
+
rowSortingFeature,
|
|
74
|
+
rowPaginationFeature,
|
|
75
|
+
columnFilteringFeature,
|
|
76
|
+
columnSizingFeature,
|
|
77
|
+
columnResizingFeature, // explicit — formerly part of ColumnSizing
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
const columnHelper = createColumnHelper<typeof _features, Person>()
|
|
81
|
+
|
|
82
|
+
const columns: ColumnDef<typeof _features, Person>[] = columnHelper.columns([
|
|
83
|
+
columnHelper.accessor('name', {
|
|
84
|
+
header: 'Name',
|
|
85
|
+
sortFn: 'alphanumeric', // renamed from sortingFn
|
|
86
|
+
}),
|
|
87
|
+
])
|
|
88
|
+
|
|
89
|
+
const table = useTable({
|
|
90
|
+
_features,
|
|
91
|
+
_rowModels: {
|
|
92
|
+
sortedRowModel: createSortedRowModel(sortFns),
|
|
93
|
+
filteredRowModel: createFilteredRowModel(filterFns),
|
|
94
|
+
paginatedRowModel: createPaginatedRowModel(),
|
|
95
|
+
},
|
|
96
|
+
columns,
|
|
97
|
+
data,
|
|
98
|
+
enableColumnPinning: true, // split from enablePinning
|
|
99
|
+
enableRowPinning: true,
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
// State reads
|
|
103
|
+
const allState = table.store.state // full snapshot
|
|
104
|
+
const sorting = table.atoms.sorting.get() // per-slice atom
|
|
105
|
+
const cells = row.getAllCellsByColumnId() // no underscore
|
|
106
|
+
|
|
107
|
+
// Rendering
|
|
108
|
+
// <table.FlexRender header={header} />
|
|
109
|
+
// <table.FlexRender cell={cell} />
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### v8 muscle-memory anti-shape
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
// === v8 muscle memory — every line is broken in v9. ===
|
|
116
|
+
import {
|
|
117
|
+
useReactTable, // (1) renamed → useTable
|
|
118
|
+
getCoreRowModel, // (2) no longer a root option
|
|
119
|
+
getFilteredRowModel, // move to _rowModels as factories
|
|
120
|
+
getSortedRowModel, // createSortedRowModel(sortFns) etc.
|
|
121
|
+
getPaginationRowModel,
|
|
122
|
+
createColumnHelper, // (3) needs <TFeatures, TData> now
|
|
123
|
+
sortingFns, // (4) renamed → sortFns
|
|
124
|
+
filterFns,
|
|
125
|
+
flexRender, // still exists, prefer table.FlexRender
|
|
126
|
+
} from '@tanstack/react-table'
|
|
127
|
+
import type { ColumnDef, Row } from '@tanstack/react-table'
|
|
128
|
+
|
|
129
|
+
const columnHelper = createColumnHelper<Person>() // wrong arity
|
|
130
|
+
|
|
131
|
+
const columns: ColumnDef<Person>[] = [
|
|
132
|
+
// (5) ColumnDef<TFeatures, TData, TValue> now
|
|
133
|
+
{ accessorKey: 'name', header: 'Name', sortingFn: 'alphanumeric' }, // (6) renamed → sortFn
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
const table = useReactTable({
|
|
137
|
+
columns,
|
|
138
|
+
data,
|
|
139
|
+
getCoreRowModel: getCoreRowModel(), // (2) move into _rowModels
|
|
140
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
141
|
+
getSortedRowModel: getSortedRowModel(),
|
|
142
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
143
|
+
filterFns, // (7) no longer a root option
|
|
144
|
+
sortingFns, // (4)+(7)
|
|
145
|
+
enablePinning: true, // (8) split → enableColumnPinning / enableRowPinning
|
|
146
|
+
onColumnSizingInfoChange: setInfo, // (9) renamed → onColumnResizingChange
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
const all = table.getState() // (10) → table.store.state
|
|
150
|
+
const cells = row._getAllCellsByColumnId() // underscore removed
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Transitional `useLegacyTable` (React only)
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
import {
|
|
157
|
+
useLegacyTable,
|
|
158
|
+
getCoreRowModel,
|
|
159
|
+
legacyCreateColumnHelper,
|
|
160
|
+
} from '@tanstack/react-table/legacy'
|
|
161
|
+
|
|
162
|
+
const legacyHelper = legacyCreateColumnHelper<Person>()
|
|
163
|
+
const legacyTable = useLegacyTable({
|
|
164
|
+
columns,
|
|
165
|
+
data,
|
|
166
|
+
getCoreRowModel: getCoreRowModel(),
|
|
167
|
+
})
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
This accepts the v8 shape on top of the v9 engine. Deprecated, ships every feature, no `table.Subscribe`, no atoms. Removed in v10. Use to unblock incremental migration only — not as a long-term API. Angular has no `useLegacyTable` equivalent; Angular projects must migrate directly.
|
|
171
|
+
|
|
172
|
+
## Common Mistakes
|
|
173
|
+
|
|
174
|
+
### [CRITICAL] Hallucinating react-table v7 / pre-v9 API names
|
|
175
|
+
|
|
176
|
+
Wrong:
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
// v7
|
|
180
|
+
import { useTable, useSortBy } from 'react-table'
|
|
181
|
+
const table = useTable({ columns, data }, useSortBy)
|
|
182
|
+
|
|
183
|
+
// v8
|
|
184
|
+
import { useReactTable, getCoreRowModel } from '@tanstack/react-table'
|
|
185
|
+
const table = useReactTable({
|
|
186
|
+
columns,
|
|
187
|
+
data,
|
|
188
|
+
getCoreRowModel: getCoreRowModel(),
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Correct:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
import {
|
|
196
|
+
useTable,
|
|
197
|
+
tableFeatures,
|
|
198
|
+
rowSortingFeature,
|
|
199
|
+
createSortedRowModel,
|
|
200
|
+
sortFns,
|
|
201
|
+
} from '@tanstack/react-table'
|
|
202
|
+
|
|
203
|
+
const _features = tableFeatures({ rowSortingFeature })
|
|
204
|
+
const table = useTable({
|
|
205
|
+
_features,
|
|
206
|
+
_rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
|
|
207
|
+
columns,
|
|
208
|
+
data,
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Every major release of TanStack Table has been a substantial upgrade. Agents trained on v7 or v8 will confidently emit shapes that no longer exist. This is the #2 AI failure (after reimplementing built-ins).
|
|
213
|
+
|
|
214
|
+
Source: maintainer interview (Phase 4, 2026-05-17)
|
|
215
|
+
|
|
216
|
+
### [CRITICAL] Importing pre-bundled `getCoreRowModel` / `getSortedRowModel` etc.
|
|
217
|
+
|
|
218
|
+
Wrong:
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
// v8 pattern — won't drive v9 row models
|
|
222
|
+
const table = useTable({
|
|
223
|
+
_features,
|
|
224
|
+
data,
|
|
225
|
+
columns,
|
|
226
|
+
getCoreRowModel: getCoreRowModel(),
|
|
227
|
+
getSortedRowModel: getSortedRowModel(),
|
|
228
|
+
})
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Correct:
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
import {
|
|
235
|
+
useTable,
|
|
236
|
+
tableFeatures,
|
|
237
|
+
rowSortingFeature,
|
|
238
|
+
createSortedRowModel,
|
|
239
|
+
sortFns,
|
|
240
|
+
} from '@tanstack/react-table'
|
|
241
|
+
|
|
242
|
+
const _features = tableFeatures({ rowSortingFeature })
|
|
243
|
+
const table = useTable({
|
|
244
|
+
_features,
|
|
245
|
+
_rowModels: {
|
|
246
|
+
sortedRowModel: createSortedRowModel(sortFns), // factory takes sortFns argument
|
|
247
|
+
},
|
|
248
|
+
columns,
|
|
249
|
+
data,
|
|
250
|
+
})
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
In v9, row models live under `_rowModels` and the factories REQUIRE their \*Fns argument for tree-shaking: `createFilteredRowModel(filterFns)`, `createSortedRowModel(sortFns)`, `createGroupedRowModel(aggregationFns)`. Core is automatic.
|
|
254
|
+
|
|
255
|
+
Source: PR #6234 (atoms refactor); packages/table-core/src/index.ts
|
|
256
|
+
|
|
257
|
+
### [CRITICAL] `createColumnHelper<TData>()` (v8 arity)
|
|
258
|
+
|
|
259
|
+
Wrong:
|
|
260
|
+
|
|
261
|
+
```ts
|
|
262
|
+
const columnHelper = createColumnHelper<Person>()
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Correct:
|
|
266
|
+
|
|
267
|
+
```ts
|
|
268
|
+
const _features = tableFeatures({ rowSortingFeature })
|
|
269
|
+
const columnHelper = createColumnHelper<typeof _features, Person>()
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
v9 requires `<TFeatures, TData>`. `typeof _features` is the standard idiom — declare features once at module scope and reuse the type.
|
|
273
|
+
|
|
274
|
+
Source: packages/table-core/src/helpers/columnHelper.ts; docs/framework/react/guide/migrating.md
|
|
275
|
+
|
|
276
|
+
### [HIGH] Reading state via `table.getState()`
|
|
277
|
+
|
|
278
|
+
Wrong:
|
|
279
|
+
|
|
280
|
+
```ts
|
|
281
|
+
const all = table.getState()
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Correct:
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
const all = table.store.state // flat snapshot, no subscription
|
|
288
|
+
const sorting = table.atoms.sorting.get() // per-slice
|
|
289
|
+
const selected = table.state // typed selector output (framework adapters)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
`table.getState()` was removed. There are three reads now, picked by what you need.
|
|
293
|
+
|
|
294
|
+
Source: docs/framework/table-core/guide/migrating.md
|
|
295
|
+
|
|
296
|
+
### [HIGH] Sorting renames missed
|
|
297
|
+
|
|
298
|
+
Wrong:
|
|
299
|
+
|
|
300
|
+
```ts
|
|
301
|
+
{ accessorKey: 'age', sortingFn: 'alphanumeric' } // v8 name
|
|
302
|
+
useTable({ sortingFns: { ... } }) // v8 option
|
|
303
|
+
column.getSortingFn() // v8 method
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Correct:
|
|
307
|
+
|
|
308
|
+
```ts
|
|
309
|
+
columnHelper.accessor('age', { sortFn: 'alphanumeric' })
|
|
310
|
+
createSortedRowModel(sortFns) // pass registry to the factory
|
|
311
|
+
column.getSortFn()
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
v9 renamed every sorting API: `sortingFn` → `sortFn`, `sortingFns` → `sortFns`, type `SortingFn` → `SortFn`, `getSortingFn()` → `getSortFn()`. TypeScript surfaces these but agents try v8 names first.
|
|
315
|
+
|
|
316
|
+
Source: packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts
|
|
317
|
+
|
|
318
|
+
### [HIGH] Using `enablePinning` at the table level
|
|
319
|
+
|
|
320
|
+
Wrong:
|
|
321
|
+
|
|
322
|
+
```ts
|
|
323
|
+
const table = useTable({
|
|
324
|
+
_features: tableFeatures({ columnPinningFeature, rowPinningFeature }),
|
|
325
|
+
enablePinning: true, // ignored at table level in v9
|
|
326
|
+
})
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Correct:
|
|
330
|
+
|
|
331
|
+
```ts
|
|
332
|
+
const table = useTable({
|
|
333
|
+
_features: tableFeatures({ columnPinningFeature, rowPinningFeature }),
|
|
334
|
+
enableColumnPinning: true,
|
|
335
|
+
enableRowPinning: true,
|
|
336
|
+
})
|
|
337
|
+
|
|
338
|
+
// Per-column opt-out is still `enablePinning`:
|
|
339
|
+
columnHelper.accessor('id', { enablePinning: false })
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
v9 split `enablePinning` (table-level) into `enableColumnPinning` + `enableRowPinning`. The bare name now refers ONLY to per-column opt-out.
|
|
343
|
+
|
|
344
|
+
Source: packages/table-core/src/features/column-pinning/columnPinningFeature.types.ts
|
|
345
|
+
|
|
346
|
+
### [HIGH] Treating column resizing as part of column sizing
|
|
347
|
+
|
|
348
|
+
Wrong:
|
|
349
|
+
|
|
350
|
+
```ts
|
|
351
|
+
// v8 — ColumnSizing implied resizing too
|
|
352
|
+
const table = useTable({
|
|
353
|
+
_features: tableFeatures({ columnSizingFeature }),
|
|
354
|
+
onColumnSizingInfoChange: setInfo, // v8 name
|
|
355
|
+
})
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Correct:
|
|
359
|
+
|
|
360
|
+
```ts
|
|
361
|
+
const table = useTable({
|
|
362
|
+
_features: tableFeatures({
|
|
363
|
+
columnSizingFeature,
|
|
364
|
+
columnResizingFeature, // explicit in v9
|
|
365
|
+
}),
|
|
366
|
+
onColumnResizingChange: setResizing, // renamed
|
|
367
|
+
// state key columnSizingInfo → columnResizing
|
|
368
|
+
})
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
v9 split them: `columnSizingFeature` for fixed widths, `columnResizingFeature` for drag-to-resize. State key `columnSizingInfo` → `columnResizing`; option `onColumnSizingInfoChange` → `onColumnResizingChange`.
|
|
372
|
+
|
|
373
|
+
Source: docs/framework/table-core/guide/migrating.md
|
|
374
|
+
|
|
375
|
+
### [MEDIUM] Calling underscore-prefixed APIs
|
|
376
|
+
|
|
377
|
+
Wrong:
|
|
378
|
+
|
|
379
|
+
```ts
|
|
380
|
+
row._getAllCellsByColumnId()
|
|
381
|
+
table._getFacetedRowModel()
|
|
382
|
+
table._getFacetedMinMaxValues()
|
|
383
|
+
table._getFacetedUniqueValues()
|
|
384
|
+
table._getPinnedRows()
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Correct:
|
|
388
|
+
|
|
389
|
+
```ts
|
|
390
|
+
row.getAllCellsByColumnId()
|
|
391
|
+
table.getFacetedRowModel()
|
|
392
|
+
table.getFacetedMinMaxValues()
|
|
393
|
+
table.getFacetedUniqueValues()
|
|
394
|
+
table.getPinnedRows()
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
All became public — drop the underscore.
|
|
398
|
+
|
|
399
|
+
Source: docs/framework/table-core/guide/migrating.md
|
|
400
|
+
|
|
401
|
+
### [MEDIUM] Module augmentation with v8 generic arity
|
|
402
|
+
|
|
403
|
+
Wrong:
|
|
404
|
+
|
|
405
|
+
```ts
|
|
406
|
+
declare module '@tanstack/react-table' {
|
|
407
|
+
interface ColumnMeta<TData, TValue> {
|
|
408
|
+
customProp: string
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Correct:
|
|
414
|
+
|
|
415
|
+
```ts
|
|
416
|
+
declare module '@tanstack/react-table' {
|
|
417
|
+
interface ColumnMeta<TFeatures, TData, TValue> {
|
|
418
|
+
customProp: string
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
v9 added `TFeatures` as the first generic. Module augmentation silently widens types if arity is wrong.
|
|
424
|
+
|
|
425
|
+
Source: docs/framework/table-core/guide/migrating.md
|
|
426
|
+
|
|
427
|
+
### [MEDIUM] Mutating `data` or `columns` in place
|
|
428
|
+
|
|
429
|
+
Wrong:
|
|
430
|
+
|
|
431
|
+
```ts
|
|
432
|
+
// v8 pattern, breaks at TS layer in v9
|
|
433
|
+
const data: Person[] = []
|
|
434
|
+
function addRow(row: Person) {
|
|
435
|
+
data.push(row)
|
|
436
|
+
rerender()
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
Correct:
|
|
441
|
+
|
|
442
|
+
```ts
|
|
443
|
+
const [data, setData] = useState<Person[]>([])
|
|
444
|
+
function addRow(row: Person) {
|
|
445
|
+
setData((prev) => [...prev, row])
|
|
446
|
+
}
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
PR #6183 makes `data` and `columns` readonly to force changes through state.
|
|
450
|
+
|
|
451
|
+
Source: PR #6183
|
|
452
|
+
|
|
453
|
+
### [MEDIUM] Reaching for `useLegacyTable` in new code
|
|
454
|
+
|
|
455
|
+
Wrong:
|
|
456
|
+
|
|
457
|
+
```ts
|
|
458
|
+
// Long-term use of the legacy shim
|
|
459
|
+
import { useLegacyTable, getCoreRowModel } from '@tanstack/react-table/legacy'
|
|
460
|
+
const table = useLegacyTable({
|
|
461
|
+
columns,
|
|
462
|
+
data,
|
|
463
|
+
getCoreRowModel: getCoreRowModel(),
|
|
464
|
+
})
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
Correct:
|
|
468
|
+
|
|
469
|
+
```ts
|
|
470
|
+
// Migrate to native v9 shape
|
|
471
|
+
import {
|
|
472
|
+
useTable,
|
|
473
|
+
tableFeatures,
|
|
474
|
+
rowSortingFeature,
|
|
475
|
+
createSortedRowModel,
|
|
476
|
+
sortFns,
|
|
477
|
+
} from '@tanstack/react-table'
|
|
478
|
+
const _features = tableFeatures({ rowSortingFeature })
|
|
479
|
+
const table = useTable({
|
|
480
|
+
_features,
|
|
481
|
+
_rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
|
|
482
|
+
columns,
|
|
483
|
+
data,
|
|
484
|
+
})
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
`useLegacyTable` is React-only, deprecated, bundles every feature, doesn't support `table.Subscribe`, and is removed in v10. It exists to unblock incremental migration — not as a long-term API.
|
|
488
|
+
|
|
489
|
+
Source: packages/react-table/src/legacy.ts; docs/framework/react/guide/use-legacy-table.md
|
|
490
|
+
|
|
491
|
+
## See also
|
|
492
|
+
|
|
493
|
+
- `tanstack-table/setup` — what the v9-native shape looks like
|
|
494
|
+
- `tanstack-table/state-management` — `table.store.state` / `table.atoms` / `table.state` ownership
|
|
495
|
+
- `tanstack-table/column-definitions` — `createColumnHelper<typeof _features, TData>()` generic order
|