想要直接跳到实现部分吗?请查看以下示例:
列分面是一项功能,允许您根据给定列的数据生成该列的值列表。例如,可以从列中的所有行生成列中唯一值的列表,以用作自动完成筛选组件中的搜索建议。或者,可以从数字列生成最小值和最大值的元组,以用作范围滑块筛选组件的范围。
为了使用任何列分面功能,您必须在表格选项中包含适当的行模型。
//仅导入您��要的行模型
import {
getCoreRowModel,
getFacetedRowModel,
getFacetedMinMaxValues, //取决于 getFacetedRowModel
getFacetedUniqueValues, //取决于 getFacetedRowModel
}
//...
const table = useReactTable({
columns,
data,
getCoreRowModel: getCoreRowModel(),
getFacetedRowModel: getFacetedRowModel(), //如果您需要列的值列表(其他分面行模型依赖于此模型)
getFacetedMinMaxValues: getFacetedMinMaxValues(), //如果您需要最小值/最大值
getFacetedUniqueValues: getFacetedUniqueValues(), //如果您需要唯一值的列表
//...
})
//仅导入您需要的行模型
import {
getCoreRowModel,
getFacetedRowModel,
getFacetedMinMaxValues, //取决于 getFacetedRowModel
getFacetedUniqueValues, //取决于 getFacetedRowModel
}
//...
const table = useReactTable({
columns,
data,
getCoreRowModel: getCoreRowModel(),
getFacetedRowModel: getFacetedRowModel(), //如果您需要列的值列表(其他分面行模型依赖于此模型)
getFacetedMinMaxValues: getFacetedMinMaxValues(), //如果您需要最小值/最大值
getFacetedUniqueValues: getFacetedUniqueValues(), //如果您需要唯一值的列表
//...
})
首先,您必须包含 getFacetedRowModel 行模型。此行模型将为给定列生成值列表。如果您需要唯一值的列表,请包含 getFacetedUniqueValues 行模型。如果您需要最小值和最大值的元组,请包含 getFacetedMinMaxValues 行模型。
在表格选项中包含适当的行模型后,您将能够使用分面列实例 API 访问由分面行模型生成的值列表。
// 用于自动完成筛选器的唯一值列表
const autoCompleteSuggestions =
Array.from(column.getFacetedUniqueValues().keys())
.sort()
.slice(0, 5000);
// 用于自动完成筛选器的唯一值列表
const autoCompleteSuggestions =
Array.from(column.getFacetedUniqueValues().keys())
.sort()
.slice(0, 5000);
// 用于范围筛选器的最小值和最大值的元组
const [min, max] = column.getFacetedMinMaxValues() ?? [0, 1];
// 用于范围筛选器的最小值和最大值的元组
const [min, max] = column.getFacetedMinMaxValues() ?? [0, 1];
您可以不在客户端使用内置的分面功能,而是在服务器端实现自己的分面逻辑,并将分面值传递给客户端。您可以使用 getFacetedUniqueValues 和 getFacetedMinMaxValues 表格选项从服务器端解析分面值。
const facetingQuery = useQuery(
//...
)
const table = useReactTable({
columns,
data,
getCoreRowModel: getCoreRowModel(),
getFacetedRowModel: getFacetedRowModel(),
getFacetedUniqueValues: (table, columnId) => {
const uniqueValueMap = new Map<string, number>();
//...
return uniqueValueMap;
},
getFacetedMinMaxValues: (table, columnId) => {
//...
return [min, max];
},
//...
})
const facetingQuery = useQuery(
//...
)
const table = useReactTable({
columns,
data,
getCoreRowModel: getCoreRowModel(),
getFacetedRowModel: getFacetedRowModel(),
getFacetedUniqueValues: (table, columnId) => {
const uniqueValueMap = new Map<string, number>();
//...
return uniqueValueMap;
},
getFacetedMinMaxValues: (table, columnId) => {
//...
return [min, max];
},
//...
})
或者,您根本不必将���何分面逻辑通过 TanStack Table API。只需获取您的列表并将其直接传递给您的筛选组件即可。