
Description
Sort with rowSortingFeature, sortedRowModel, sortFns, multi-sort and removal options, sortUndefined, and manualSorting. Load for comparator direction, incoming server order, or product-specific sorting cycles.
SKILL.md
This skill builds on core, table-features, and client-vs-server. Sorting state describes order; client processing requires a sorted model and server processing requires sorted input.
Setup
import {
createSortedRowModel,
rowSortingFeature,
sortFn_alphanumeric,
sortFn_text,
tableFeatures,
} from '@tanstack/table-core'
export const features = tableFeatures({
rowSortingFeature,
sortedRowModel: createSortedRowModel(),
sortFns: { alphanumeric: sortFn_alphanumeric, text: sortFn_text },
})
Import individual sortFn_* built-ins and register only those your columns
reference by string name or that sortFn: 'auto' should resolve for your data
types. The full sortFns registry object still works but bundles every
built-in; numeric columns fall back to a basic comparator without registration.
Core Patterns
const options = { enableSortingRemoval: false, enableMultiSort: true }
const numericColumn = { sortUndefined: 'last' as const }
Configure sort cycles and undefined placement to match the product rather than relying on implicit defaults.
Common Mistakes
CRITICAL Expecting manual mode to reorder
Wrong: const options = { data: unsortedRows, manualSorting: true }
Correct: const options = { data: serverSortedRows, manualSorting: true }
Manual sorting bypasses sortedRowModel and trusts incoming order.
Source: packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts
HIGH Reversing inside the comparator
Wrong: const newest: SortFn<any, any> = (a, b, id) => b.getValue<number>(id) - a.getValue<number>(id)
Correct: const numeric: SortFn<any, any> = (a, b, id) => a.getValue<number>(id) - b.getValue<number>(id)
Return ascending comparison only; Table reverses it when sorting is descending.
Source: docs/framework/react/guide/sorting.md#custom-sorting-functions
MEDIUM Leaving ambiguous sort policy
Wrong: const options = { enableSortingRemoval: true }
Correct: const options = { enableSortingRemoval: false }; const rankColumn = { sortUndefined: 'last' as const }
Undefined placement and removal cycles can differ from expected product behavior unless configured.
Source: packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts
API Discovery
Inspect node_modules/@tanstack/table-core/dist/features/row-sorting/ and dist/features/row-sorting/sortFns.d.ts for current names and comparator contracts.
More skills from the table repository
View all 30 skillsaggregation
perform data aggregation in TanStack Table
Jul 26Data AnalysisFrontendTanStackapi-not-found
diagnose TanStack Table API errors
Jul 26DebuggingFrontendTanStackcell-selection
select rectangular cell ranges in tables
Jul 26Data AnalysisTanStackUI Componentsclient-vs-server
manage TanStack Table data pipelines
Jul 26Data PipelineFrontendPerformanceTanStackcolumn-faceting
build faceted filter UIs
Jul 26Data VisualizationFrontendTanStackcolumn-filtering
implement column filtering in TanStack Table
Jul 26Data AnalysisFrontendTanStack
More from TanStack
View publishercolumn-ordering
manage TanStack Table column ordering
table
Jul 26FrontendTanStackUI Componentscolumn-pinning
configure column pinning in TanStack Table
table
Jul 26CSSFrontendTanStackUI Componentscolumn-resizing
implement column resizing in TanStack Table
table
Jul 26FrontendTanStackUI Componentscolumn-sizing
configure column sizing in TanStack Table
table
Jul 26CSSFrontendTanStackUI Componentscolumn-visibility
manage column visibility in TanStack Table
table
Jul 26FrontendTanStackUI Componentscore
build data grids with TanStack Table
table
Jul 26Data AnalysisFrontendUI Components