排序状态以以下形式存储在表格中:
export type SortDirection = 'asc' | 'desc'
export type ColumnSort = { id: string desc: boolean}
export type SortingState = ColumnSort[]
export type SortingTableState = { sorting: SortingState}
以下排序函数内置于表格核心:
alphanumeric
alphanumericCaseSensitive
text
textCaseSensitive
datetime
Date
对象,请使用此选项。basic
a > b ? -1 : b < a ? 1 : 0
比较进行排序。这是最快的排序函数,但可能不是最准确的。每个排序函数接收两行数据和一个列 ID,并使用列 ID 比较这两行数据,以升序返回 -1
、0
或 1
。下面是一个速查表:
返回值 | 升序排序 |
---|---|
-1 | a < b |
0 | a === b |
1 | a > b |
每个排序函数的类型签名如下:
export type SortingFn<TData extends AnyData> = { (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number}
可以通过以下方式将排序函数用作 columnDefinition.sortingFn
的参数:
tableOptions.sortingFns
选项提供的自定义排序函数columnDefinition.sortingFn
选项的函数columnDef.sortingFn
可用的最终排序函数列表使用以下类型:
export type SortingFnOption<TData extends AnyData> = | 'auto' | SortingFns | BuiltInSortingFns | SortingFn<TData>
sortingFn
sortingFn?: SortingFn | keyof SortingFns | keyof BuiltInSortingFns
用于此列的排序函数。
选项:
sortDescFirst
sortDescFirst?: boolean
设置为 true
,以使此列的排序切换在降序方向开始。
enableSorting
enableSorting?: boolean
启用/禁用此列的排序。
enableMultiSort
enableMultiSort?: boolean
启用/禁用此列的多重排序。
invertSorting
invertSorting?: boolean
反转此列的排序顺序。这对于具有倒置的最佳/最差比例的值很有用,其中较小的数字更好,例如排名(第1名、第2名、第3名)或类似高尔夫的记分。
sortUndefined
sortUndefined?: false | -1 | 1 // 默认为 false
false
-1
1
getAutoSortingFn
getAutoSortingFn: () => SortingFn<TData>
根据列的值自动推断并返回排序函数。
getAutoSortDir
getAutoSortDir: () => SortDirection
根据列的值自动推断并返回排序方向。
getSortingFn
getSortingFn: () => SortingFn<TData>
返回用于此列的解析排序函数。
getNextSortingOrder
getNextSortingOrder: () => SortDirection | false
返回下一个排序顺序。
getCanSort
getCanSort: () => boolean
返回此列是否可以排序。
getCanMultiSort
getCanMultiSort: () => boolean
返回此列是否可以进行多重排序。
getSortIndex
getSortIndex: () => number
返回此列在排序状态中的索引位置。
getIsSorted
getIsSorted: () => false | SortDirection
返回此列是否已排序。
clearSorting
clearSorting: () => void
从表格的排序状态中移除此列。
toggleSorting
toggleSorting: (desc?: boolean, isMulti?: boolean) => void
切换此列的排序状态。如果提供了 desc
,它将强制使用该值作为排序方向。如果提供了 isMulti
,它将对该列进行多重排序(如果已排序,则切换)。
getToggleSortingHandler
getToggleSortingHandler: () => undefined | ((event: unknown) => void)
返回一个函数,可用于切换此列的排序状态。这对于将点击处理程序附加到列标题很有用。
sortingFns
sortingFns?: Record<string, SortingFn>
此选项允许您定义自定义排序函数,并可以通过其键在列的 sortingFn
选项中引用。示例:
declare module '@tanstack/table-core' { interface SortingFns { myCustomSorting: SortingFn<unknown> }}
const column = columnHelper.data('key', { sortingFn: 'myCustomSorting',})
const table = useReactTable({ columns: [column], sortingFns: { myCustomSorting: (rowA: any, rowB: any, columnId: any): number => rowA.getValue(columnId).value < rowB.getValue(columnId).value ? 1 : -1, },})
manualSorting
manualSorting?: boolean
启用表格的手动排序。如果为 true
,则需要在将数据传递给表格之前对其进行排序。如果进行服务器端排序,这很有用。
onSortingChange
onSortingChange?: OnChangeFn<SortingState>
如果提供了此函数,当 state.sorting
更改时,将使用 updaterFn
调用它。这将覆盖默认的内部状态管理,因此您需要在表格之外完全或部分地保持状态更改。
enableSorting
enableSorting?: boolean
启用/禁用表格的排序。
enableSortingRemoval
enableSortingRemoval?: boolean
启用/禁用删除表格的排序功能。如果为 true
,则更改排序顺序将循环如下:'none' -> 'desc' -> 'asc' -> 'none' -> ... 如果为 false
,则更改排序顺序将循环如下:'none' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...
enableMultiRemove
enableMultiRemove?: boolean
启用/禁用删除多重排序的功能。
enableMultiSort
enableMultiSort?: boolean
启用/禁用表格的多重排序。
sortDescFirst
sortDescFirst?: boolean
如果为 true
,则所有排序将默认为降序作为其第一个切换状态。
getSortedRowModel
getSortedRowModel?: (table: Table<TData>) => () => RowModel<TData>
此函数用于检索已排序的行模型。如果使用服务器端排序,则不需要此函数。要使用客户端排序,请将适配器导出的 getSortedRowModel()
传递给表格,或者自己实现。
maxMultiSortColCount
maxMultiSortColCount?: number
设置可以进行多重排序的最大列数。
isMultiSortEvent
isMultiSortEvent?: (e: unknown) => boolean
传递一个自定义函数,用于确定是否触发多重排序事件。它接收来自排序切换处理程序的事件,并应返回 true
,如果事件应触发多重排序。
setSorting
setSorting: (updater: Updater<SortingState>) => void
设置或更新 state.sorting
状态。
resetSorting
resetSorting: (defaultState?: boolean) => void
将 sorting 状态重置为 initialState.sorting
,或者可以传递 true
强制将默认空状态重置为 []
。
getPreSortedRowModel
getPreSortedRowModel: () => RowModel<TData>
返回在应用任何排序之前的表格的行模型。
getSortedRowModel
getSortedRowModel: () => RowModel<TData>
返回应用排序后的表格的行模型。