mcpField
T
tanstack-table

tanstack-table

github.com/oakoss开发20140 次安装11 周前更新
代码仓库

关于 tanstack-table

TanStack Table 是面向需要自定义表格渲染的开发者的无头表格库,提供表格状态与逻辑。它支持排序、筛选、分页、选择、分组等操作。

主要功能

  1. 01无头表格状态与逻辑
  2. 02排序、筛选和分页
  3. 03行选择与展开
  4. 04分组和列控制
  5. 05服务端数据模式
  6. 06虚拟化集成

适用场景

  1. 01构建自定义数据表格
  2. 02展示服务端分页结果
  3. 03通过虚拟化处理大型数据集

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oakoss/agent-skills --skill tanstack-table

安装后在 Claude Code 中输入/tanstack-table确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
column-definitions.md
column-row-pinning.md
expanding-grouping.md
filtering.md
infinite-scroll.md
known-issues.md
reusable-components.md
server-side-patterns.md
v7-migration.md
virtualization.md

详细介绍

TanStack Table

概述

TanStack Table 是一个无头表格库——它提供状态管理和逻辑,但不提供 UI。渲染由你负责;它负责处理排序、筛选、分页、选择等操作。

适用场景: 需要排序、筛选和分页的复杂数据表、服务端数据、大型数据集(1000 行以上并启用虚拟化)、行选择/展开/分组。

不适用场景: 简单的静态表格(直接使用 <table>)、仅用于展示的列表(使用列表组件)、类似电子表格的编辑(可考虑使用 AG Grid)。

快速参考

模式API / 配置要点
基本表格useReactTable({ data, columns, getCoreRowModel })对 data/columns 使用记忆化,避免重复渲染
列辅助工具createColumnHelper<T>()类型安全的列定义
列分组columnHelper.group({ header, columns })嵌套表头;不要固定分组列
排序getSortedRowModel() + onSortingChange服务端排序使用 manualSorting: true
筛选getFilteredRowModel() + onColumnFiltersChange服务端筛选使用 manualFiltering: true
分页getPaginationRowModel() + onPaginationChangemanualPagination: true + pageCount
行选择enableRowSelection + onRowSelectionChange设置 getRowId,以便使用稳定的选择键
列可见性onColumnVisibilityChange使用 column.toggleVisibility() 切换
列固定enableColumnPinning + initialState.columnPinning不要固定分组列(已知问题)
行展开getExpandedRowModel() + getSubRows用于嵌套/树形数据
列调整大小enableColumnResizing + columnResizeMode实时调整使用 onChange,追求性能使用 onEnd
行分组getGroupedRowModel() + aggregationFn行数达到 10k 以上时性能会下降
服务端处理manual*: true 标记 + 在 queryKey 中包含状态将所有状态放入查询键,以便正确重新获取数据
无限滚动useInfiniteQuery + 展平页面与 TanStack Virtual 结合,获得最佳性能
虚拟化@tanstack/react-virtual 中的 useVirtualizer容器隐藏时(选项卡/模态框)禁用
React 19 编译器'use no memo' 指令在 v9 修复编译器兼容性之前必须使用

常见操作

任务方法
排序列column.toggleSorting()
筛选列column.setFilterValue(value)
第一页table.firstPage()
下一页table.nextPage()
上一页table.previousPage()
最后一页table.lastPage()
跳转到指定页table.setPageIndex(n)
选择行row.toggleSelected()
隐藏列column.toggleVisibility()
获取原始数据row.original
固定列column.pin('left')
调整列大小header.getResizeHandler()
展开行row.toggleExpanded()

行模型

导入用途
getCoreRowModel必需
getSortedRowModel排序
getFilteredRowModel筛选
getPaginationRowModel分页
getExpandedRowModel展开
getGroupedRowModel分组
getFacetedRowModel分面筛选计数
getFacetedUniqueValues每个分面的唯一值
getFacetedMinMaxValues每个分面的最小值/最大值

常见错误

错误正确做法
数据/列引用不稳定使用 useMemo 进行记忆化,或在组件外定义
服务端处理时缺少 manual* 标志设置 manualPagination、manualSorting、manualFiltering
查询键缺少表格状态在 queryKey 中包含分页、排序和筛选条件
从 @tanstack/table-core 导入从 @tanstack/react-table 导入
使用 v7 的 useTable/Header/accessor使用 v8 的 useReactTable/header/accessorKey
固定分组列固定组内的单列,而不是父列
对 10k+ 行进行分组使用服务端分组,或对大型数据集禁用分组
更改页面时列筛选器未清除筛选条件更改时将 pageIndex 重置为 0
使用 React Compiler 时缺少 'use no memo'在使用 useReactTable 的组件中添加该指令
行选择时缺少 getRowId设置 getRowId: (row) => row.id,以确保选择键稳定
筛选值类型不匹配保持值类型一致;使用 undefined 而非 null 清除值

委派

  • 表格模式探索:使用 Explore agent
  • 服务端集成审查:使用 Task agent
  • 代码审查:委派给 code-reviewer agent

如果有 tanstack-query skill,将数据获取、缓存和无限查询模式委派给它。 如果有 tanstack-virtual skill,将独立的虚拟化模式委派给它。 如果有 tanstack-router skill,将服务端表格状态的 URL 搜索参数同步委派给它。 如果有 tanstack-start skill,将服务端数据加载的服务端函数委派给它。

参考资料

评论

支持 Markdown