aggregationFnaggregatedCellenableGroupinggetGroupingValueaggregationFngetCanGroupgetIsGroupedgetGroupedIndextoggleGroupinggetToggleGroupingHandlergetAutoAggregationFngetAggregationFngroupingColumnIdgroupingValuegetIsGroupedgetGroupingValueaggregationFnsmanualGroupingonGroupingChangeenableGroupinggetGroupedRowModelgroupedColumnModesetGroupingresetGroupinggetPreGroupedRowModelgetGroupedRowModelgetIsAggregatedgetIsGroupedgetIsPlaceholder分组状态 (grouping state) 以如下形式存储在表格中:
export type GroupingState = string[]
export type GroupingTableState = {
grouping: GroupingState
}
export type GroupingState = string[]
export type GroupingTableState = {
grouping: GroupingState
}
表格核心内置了以下聚合函数 (aggregation functions):
每个聚合函数都会接收:
并应返回一个值(通常是原始值)来构建聚合行模型 (aggregated row model)。
以下是所有聚合函数的类型签名:
export type AggregationFn<TData extends AnyData> = (
getLeafRows: () => Row<TData>[],
getChildRows: () => Row<TData>[]
) => any
export type AggregationFn<TData extends AnyData> = (
getLeafRows: () => Row<TData>[],
getChildRows: () => Row<TData>[]
) => any
可以通过以下方式使用/引用/定义聚合函数,并将其传递给 columnDefinition.aggregationFn:
columnDef.aggregationFn 可用的最终聚合函数列表使用以下类型:
export type AggregationFnOption<TData extends AnyData> =
| 'auto'
| keyof AggregationFns
| BuiltInAggregationFn
| AggregationFn<TData>
export type AggregationFnOption<TData extends AnyData> =
| 'auto'
| keyof AggregationFns
| BuiltInAggregationFn
| AggregationFn<TData>
aggregationFn?: AggregationFn | keyof AggregationFns | keyof BuiltInAggregationFns
aggregationFn?: AggregationFn | keyof AggregationFns | keyof BuiltInAggregationFns
用于此列的聚合函数。
选项:
aggregatedCell?: Renderable<
{
table: Table<TData>
row: Row<TData>
column: Column<TData>
cell: Cell<TData>
getValue: () => any
renderValue: () => any
}
>
aggregatedCell?: Renderable<
{
table: Table<TData>
row: Row<TData>
column: Column<TData>
cell: Cell<TData>
getValue: () => any
renderValue: () => any
}
>
如果单元格是聚合单元格,则为该列每行显示的单元格。如果传入函数,则会传入包含单元格上下文的 props 对象,并应返回适配器所需的属性类型(具体类型取决于使用的适配器)。
enableGrouping?: boolean
enableGrouping?: boolean
启用/禁用此列的分组功能。
getGroupingValue?: (row: TData) => any
getGroupingValue?: (row: TData) => any
指定用于在此列上分组行的值。如果未指定此选项,则将使用从 accessorKey / accessorFn 派生的值。
aggregationFn?: AggregationFnOption<TData>
aggregationFn?: AggregationFnOption<TData>
列解析后的聚合函数。
getCanGroup: () => boolean
getCanGroup: () => boolean
返回列是否可以分组。
getIsGrouped: () => boolean
getIsGrouped: () => boolean
返回列当前是否已分组。
getGroupedIndex: () => number
getGroupedIndex: () => number
返回列在分组状态 (grouping state) 中的索引。
toggleGrouping: () => void
toggleGrouping: () => void
切换列的分组状态。
getToggleGroupingHandler: () => () => void
getToggleGroupingHandler: () => () => void
返回一个切换列分组状态的函数。这对于传递给按钮的 onClick 属性非常有用。
getAutoAggregationFn: () => AggregationFn<TData> | undefined
getAutoAggregationFn: () => AggregationFn<TData> | undefined
返回列自动推断的聚合函数。
getAggregationFn: () => AggregationFn<TData> | undefined
getAggregationFn: () => AggregationFn<TData> | undefined
返回列的聚合函数。
groupingColumnId?: string
groupingColumnId?: string
如果此行已分组,则为该行分组依据的列 ID。
groupingValue?: any
groupingValue?: any
如果此行已分组,则为该组所有行在 groupingColumnId 上的唯一/共享值。
getIsGrouped: () => boolean
getIsGrouped: () => boolean
返回行当前是否已分组。
getGroupingValue: (columnId: string) => unknown
getGroupingValue: (columnId: string) => unknown
返回任何行和列(包括叶子行)的分组值。
aggregationFns?: Record<string, AggregationFn>
aggregationFns?: Record<string, AggregationFn>
此选项允许您定义自定义聚合函数,可以通过键在列的 aggregationFn 选项中引用。 示例:
declare module '@tanstack/table-core' {
interface AggregationFns {
myCustomAggregation: AggregationFn<unknown>
}
}
const column = columnHelper.data('key', {
aggregationFn: 'myCustomAggregation',
})
const table = useReactTable({
columns: [column],
aggregationFns: {
myCustomAggregation: (columnId, leafRows, childRows) => {
// 返回聚合值
},
},
})
declare module '@tanstack/table-core' {
interface AggregationFns {
myCustomAggregation: AggregationFn<unknown>
}
}
const column = columnHelper.data('key', {
aggregationFn: 'myCustomAggregation',
})
const table = useReactTable({
columns: [column],
aggregationFns: {
myCustomAggregation: (columnId, leafRows, childRows) => {
// 返回聚合值
},
},
})
manualGrouping?: boolean
manualGrouping?: boolean
启用手动分组。如果此选项设置为 true,表格将不会自动使用 getGroupedRowModel() 分组行,而是期望您在将行传递给表格之前手动分组。这对于进行服务端分组和聚合非常有用。
onGroupingChange?: OnChangeFn<GroupingState>
onGroupingChange?: OnChangeFn<GroupingState>
如果提供了此函数,当分组状态发生变化时会调用它,您需要自行管理状态。您可以通过 tableOptions.state.grouping 选项将托管状态传递回表格。
enableGrouping?: boolean
enableGrouping?: boolean
启用/禁用所有列的分组功能。
getGroupedRowModel?: (table: Table<TData>) => () => RowModel<TData>
getGroupedRowModel?: (table: Table<TData>) => () => RowModel<TData>
返回分组完成后的行模型,但不进行进一步处理。
groupedColumnMode?: false | 'reorder' | 'remove' // 默认: `reorder`
groupedColumnMode?: false | 'reorder' | 'remove' // 默认: `reorder`
分组列默认会自动重新排序到列列表的开头。如果您希望删除它们或保持原样,请在此处设置适当的模式。
setGrouping: (updater: Updater<GroupingState>) => void
setGrouping: (updater: Updater<GroupingState>) => void
设置或更新 state.grouping 状态。
resetGrouping: (defaultState?: boolean) => void
resetGrouping: (defaultState?: boolean) => void
将分组状态重置为 initialState.grouping,或者可以传递 true 强制重置为默认空白状态 []。
getPreGroupedRowModel: () => RowModel<TData>
getPreGroupedRowModel: () => RowModel<TData>
返回应用任何分组之前的表格行模型。
getGroupedRowModel: () => RowModel<TData>
getGroupedRowModel: () => RowModel<TData>
返回应用分组后的表格行模型。
getIsAggregated: () => boolean
getIsAggregated: () => boolean
返回单元格当前是否为聚合单元格。
getIsGrouped: () => boolean
getIsGrouped: () => boolean
返回单元格当前是否为分组单元格。
getIsPlaceholder: () => boolean
getIsPlaceholder: () => boolean
返回单元格当前是否为占位符单元格。
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.