用途:在 shadcn/ui 项目里实现带排序、筛选、分页、行选择、列显隐切换的表格。核心认知是 shadcn 没有 DataTable 原语,官方 recipe(https://ui.shadcn.com/docs/components/radix/data-table)把 @tanstack/react-table v8 与 shadcn Table 原语组合,需在用户侧编写可复用的 components/ui/data-table.tsx。
主要能力与心智模型:DataTable 由三部分构成——用 ColumnDef<TData, TValue>[] 描述列(accessor + header + cell);用 useReactTable({ data, columns, getCoreRowModel, ... }) 得到 headless 表格实例;用 <DataTable /> 组件渲染 shadcn <Table>,由 table.getHeaderGroups() 与 table.getRowModel().rows 驱动。必须传 getCoreRowModel: getCoreRowModel(),否则行数为零。
安装:先安装 Table 原语 npx shadcn@latest add table npm install @tanstack/react-table
六个功能对应六个 row-model 函数与状态:渲染行用 getCoreRowModel();排序用 getSortedRowModel() 配 sorting/onSortingChange;筛选用 getFilteredRowModel() 配 columnFilters/onColumnFiltersChange;分页用 getPaginationRowModel() 配 pagination/onPaginationChange;行选择与列显隐不需要额外 row-model 函数,分别配 rowSelection/onRowSelectionChange 与 columnVisibility/onColumnVisibilityChange。
用法要点:客户端模式适用于约 1000 行以内且一次性加载的数据;超过或按页加载则用服务端模式,设置 manualSorting、manualFiltering、manualPagination,并提供 pageCount(或 rowCount),在状态变化时重新取数。同一功能不可混用客户端与服务端。文件顶部必须加 "use client"。使用 flexRender(cell.column.columnDef.cell, cell.getContext()) 渲染单元格,不要直接读 cell.value。每个 onXChange 都要与 state.X 配对。行选择建议提供 getRowId。空数据要渲染占位行。
适用场景:后台管理、数据列表等需要交互表格的 React/shadcn 界面。
限制:使用该技能需熟悉 React、TanStack Table v8 与 shadcn/ui;文档未提供收费、价格或平台信息,暂未提供。