aggregationFn
aggregatedCell
enableGrouping
getGroupingValue
aggregationFn
getCanGroup
getIsGrouped
getGroupedIndex
toggleGrouping
getToggleGroupingHandler
getAutoAggregationFn
getAggregationFn
groupingColumnId
groupingValue
getIsGrouped
getGroupingValue
aggregationFns
manualGrouping
onGroupingChange
enableGrouping
getGroupedRowModel
groupedColumnMode
setGrouping
resetGrouping
getPreGroupedRowModel
getGroupedRowModel
getIsAggregated
getIsGrouped
getIsPlaceholder
分组状态 (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.