TanStack Table logo

TanStack Table

完全无样式的表头逻辑库(Headless Table),只提供数据和状态管理能力,将渲染完全交还给开发者

精选工具数据表格Headless无样式UI组件库

TanStack Table 是 TanStack 生态的核心成员,定位为完全无样式的表格逻辑引擎。不渲染任何 DOM 和 CSS,只提供排序、筛选、分组、分页等核心逻辑。支持 React、Vue、Solid、Svelte、Angular 等 8+ 框架。

TanStack Table

完全无样式的表头逻辑库(Headless Table),只提供数据和状态管理能力,将渲染完全交还给开发者。

技术简介说明

TanStack Table(前身为 React Table)是由 Tanner Linsley 创建的 TanStack 生态中的核心成员之一,定位为一个完全无样式(Headless)的表格逻辑引擎。它不渲染任何 DOM 元素,不附带任何 CSS 样式,只提供排序、筛选、分组、分页、行选择、聚合等表格核心逻辑的状态管理。开发者需要自行实现表格的 HTML 结构和样式。

这种设计理念的核心价值在于完全的控制权——开发者可以构建任何外观和交互的表格,而不受组件库预设结构的限制。TanStack Table 的框架无关核心配合 React、Vue、Solid、Svelte、Angular、Lit、Alpine 等框架适配器,使其成为跨框架表格逻辑的通用解决方案。

2026 年,TanStack Table 迎来了 v9 版本,带来了更强的 TypeScript 类型系统性能优化。同时,TanStack Intent initiative 将 AI Agent Skills 直接打包进 npm 模块,使 AI 编码助手能够正确理解和使用 TanStack Table 的 API,这在开源表格库中开创了先河。

基本信息

属性详情
官网https://tanstack.com/table/latest
GitHubhttps://github.com/tanstack/table
LicenseMIT(完全免费,无付费版)
最新版本v8.21.4(2026 年 4 月);v9 Beta 开发中
主要维护者Tanner Linsley / TanStack 团队
GitHub Stars~28,200+
框架支持React、Vue、Solid、Svelte、Angular、Lit、Alpine、原生 TS/JS
npm 包@tanstack/react-table@tanstack/vue-table@tanstack/table-core

快速上手

安装

# React
npm install @tanstack/react-table
 
# Vue
npm install @tanstack/vue-table
 
# Solid
npm install @tanstack/solid-table
 
# Svelte
npm install @tanstack/svelte-table
 
# Angular
npm install @tanstack/angular-table
 
# 核心(框架无关)
npm install @tanstack/table-core

基础配置

// 无特殊配置文件
// TanStack Table 是纯逻辑库,零配置即可使用
// 只需导入对应框架的 adapter 即可

最小示例

import React, { useMemo } from 'react';
import {
  useReactTable,
  getCoreRowModel,
  getSortedRowModel,
  flexRender,
  createColumnHelper,
} from '@tanstack/react-table';
 
const columnHelper = createColumnHelper<Person>();
 
const columns = [
  columnHelper.accessor('firstName', {
    header: 'First Name',
    cell: info => info.getValue(),
  }),
  columnHelper.accessor('lastName', {
    header: 'Last Name',
    cell: info => info.getValue(),
  }),
  columnHelper.accessor('age', {
    header: 'Age',
  }),
];
 
type Person = {
  firstName: string;
  lastName: string;
  age: number;
};
 
const data: Person[] = [
  { firstName: 'John', lastName: 'Doe', age: 30 },
  { firstName: 'Jane', lastName: 'Smith', age: 25 },
];
 
function App() {
  const table = useReactTable({
    data,
    columns,
    getCoreRowModel: getCoreRowModel(),
    getSortedRowModel: getSortedRowModel(),
  });
 
  return (
    <table>
      <thead>
        {table.getHeaderGroups().map(headerGroup => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map(header => (
              <th key={header.id}>
                {header.isPlaceholder ? null : (
                  <div
                    onClick={header.column.getToggleSortingHandler()}
                    style={{ cursor: 'pointer' }}
                  >
                    {flexRender(
                      header.column.columnDef.header,
                      header.getContext()
                    )}
                  </div>
                )}
              </th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody>
        {table.getRowModel().rows.map(row => (
          <tr key={row.id}>
            {row.getVisibleCells().map(cell => (
              <td key={cell.id}>
                {flexRender(cell.column.columnDef.cell, cell.getContext())}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

核心概念与架构

Headless 架构

TanStack Table 的核心设计哲学是 "只提供大脑,不提供身体"

┌──────────────────────────────────────────┐
│           你的 UI 组件(你自己写)          │
│    ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐  │
│    │ <th> │ │ <td> │ │ <tr> │ │  ... │  │
│    └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘  │
│       │        │        │        │       │
│  ┌────┴────────┴────────┴────────┴────┐  │
│  │    TanStack Table (逻辑层)         │  │
│  │  • 排序状态  • 筛选状态            │  │
│  │  • 分组计算  • 分页计算            │  │
│  │  • 行选择    • 聚合计算            │  │
│  │  • 列可见性  • 展开/折叠           │  │
│  └────────────────────────────────────┘  │
│                    ↕                      │
│           你的数据源(data props)         │
└──────────────────────────────────────────┘

核心概念

  • Table Instance:表格实例,由 useReactTable / useVueTable 等 hook 创建,包含所有状态和计算结果
  • Column Defs:列定义,声明每列的数据访问器、渲染函数、排序/筛选配置
  • Row Model:行模型计算管线,包括 Core → Sorting → Filtering → Grouping → Pagination
  • Header Groups:表头分组,支持多级表头
  • Flex Render:安全的渲染函数,支持函数式 cell/header 渲染

核心特性

  • 完全无样式:不生成任何 DOM 或 CSS,100% 由开发者控制 UI
  • 框架无关核心@tanstack/table-core 提供通用逻辑,各框架通过适配器接入
  • 排序:单列/多列排序,自定义排序函数,绝对排序
  • 筛选:全局筛选、列级筛选,支持自定义筛选函数和筛选 UI
  • 分组:行分组、聚合计算(sum、min、max、mean、count 等)
  • 分页:客户端分页,支持受控/非受控模式
  • 行选择:单选/多选,支持全选、跨页选择保持
  • 列可见性:动态显示/隐藏列
  • 展开/折叠:子行展开,支持异步加载子数据
  • 虚拟滚动支持:与 @tanstack/react-virtual 配合实现虚拟滚动
  • TypeScript 优先:完整的类型推导,v9 进一步优化类型性能
  • AI Agent Skills:v9+ 通过 TanStack Intent 内置 AI 编码助手技能

生态图

┌──────────────────────────────────────────────────┐
│                TanStack 生态                      │
├──────────────────────────────────────────────────┤
│                                                    │
│  ┌──────────────┐  ┌───────────────┐  ┌────────┐ │
│  │ TanStack     │  │ TanStack      │  │ TanStack│ │
│  │ Table        │  │ Virtual       │  │ Query  │ │
│  │ (表格逻辑)   │  │ (虚拟滚动)    │  │ (数据) │ │
│  └──────┬──────┘  └──────┬──────┘  └───┬────┘ │
│         │                │              │       │
│         └────────────────┼──────────────┘       │
│                          │                      │
│  ┌───────────────────────┴──────────────────┐   │
│  │         你的 UI 组件                      │   │
│  │   (Tailwind / MUI / Ant Design / 自研)   │   │
│  └──────────────────────────────────────────┘   │
│                                                    │
│  框架适配器:                                      │
│  ├── @tanstack/react-table                         │
│  ├── @tanstack/vue-table                           │
│  ├── @tanstack/solid-table                         │
│  ├── @tanstack/svelte-table                        │
│  ├── @tanstack/angular-table                       │
│  ├── @tanstack/lit-table                           │
│  └── @tanstack/table-core (框架无关核心)           │
│                                                    │
│  配套工具:                                        │
│  ├── TanStack Intent (AI Agent Skills)             │
│  ├── TanStack Form (表单管理)                      │
│  └── TanStack Router (路由管理)                    │
│                                                    │
│  社区 UI 封装(第三方):                          │
│  ├── Material React Table (MRT)                    │
│  ├── Mantine React Table                           │
│  └── 各种 Design System 集成                       │
└──────────────────────────────────────────────────┘

关键依赖:零运行时依赖

相关生态项目

  • @tanstack/react-virtual:虚拟滚动,与 TanStack Table 配合处理大数据量
  • @tanstack/react-query:数据获取与缓存,提供服务端数据给表格
  • TanStack Intent:AI 编码助手技能包

第三方 UI 封装

适用场景

  • 自定义设计系统:需要将表格完全融入自研 Design System 的场景
  • 高度定制化的表格 UI:标准组件库无法满足的特殊表格交互需求
  • 跨框架表格逻辑复用:一套表格逻辑同时支持 React/Vue/Angular 等多框架项目
  • 轻量级表格:不需要完整数据网格的复杂功能,只需要排序/筛选/分页逻辑
  • 教学与学习:理解表格底层原理,学习表格状态管理模式
  • 与现有 UI 库深度集成:在 Tailwind、Radix、shadcn/ui 等体系上构建表格
  • 预算有限的团队:完全免费开源,无需商业许可

开发与工程化

开发流程

# 安装核心包 + 框架适配器
npm install @tanstack/react-table
 
# 可选:虚拟滚动
npm install @tanstack/react-virtual
 
# 可选:数据获取
npm install @tanstack/react-query

工程化最佳实践

  • 使用 createColumnHelper:获得完整的类型推导
  • 配合 React Virtual 处理大数据:超过 1000 行时启用虚拟滚动
  • 服务端数据模式:结合 TanStack Query 实现服务端排序/筛选/分页
  • useMemo 缓存datacolumns 应使用 useMemo 避免不必要的重新计算
  • 受控 vs 非受控:根据需求选择状态管理模式,复杂表单场景推荐受控模式

CI/CD 集成

  • TanStack Table 作为纯逻辑库,无构建配置要求
  • 建议开启 TypeScript 严格模式以获得完整类型安全
  • v9 的类型系统更复杂,CI 中的 typecheck 尤为重要

性能与安全

性能特点

  • 纯逻辑计算:不操作 DOM,性能开销极低
  • 惰性计算:Row Model 按需计算,不触发不必要的重渲染
  • 与 Virtual 配合:结合 @tanstack/react-virtual 可流畅渲染百万行
  • Tree-shaking 友好:ESM 模块,支持按需导入

已知性能瓶颈

  • 堆内存增长:基准测试(ITNEXT 2026)显示,TanStack Table + Virtual 在 5 万行数据下堆内存增长较高
  • 大量列定义:数百列时列定义的计算开销增加
  • 复杂聚合:分组 + 多层聚合时计算开销较高
  • 非受控模式大数据:全量客户端数据 + 非受控状态可能导致帧率下降

安全注意事项

  • TanStack Table 是纯逻辑库,不直接产生 HTML,XSS 风险取决于渲染层
  • 确保 cellheader 渲染函数对用户输入进行适当转义
  • 服务端数据模式下注意接口鉴权和速率限制

技术对比

特性TanStack TableAG GridHandsontableTabulatorRevoGrid
核心理念无样式逻辑库全功能数据网格电子表格式网格交互式表格虚拟数据网格
费用完全免费Enterprise $999/年$999/年完全免费Pro 版收费
自带 UI
学习曲线中高(需理解全部概念)中(API 庞大但文档完善)
自定义能力无限(完全控制 DOM)受限于内部结构中等中等中等
排序/筛选✅ 内置逻辑✅ 内置 + UI✅ 内置 + UI✅ 内置 + UI✅ 内置 + UI
行分组✅ Enterprise
虚拟滚动需配合 Virtual✅ 内置✅ 内置✅ 内置✅ 核心优势
框架支持7+ 框架4 框架4 框架4 框架6+ 框架
TypeScript✅ 完整类型✅ v18+
AI 能力✅ Intent (Agent Skills)✅ AI Toolkit✅ MCP
服务端数据✅ 自行实现✅ 内置多模式
包体积极小(~15KB gzip)

最佳实践

生产环境建议

  1. 始终使用 createColumnHelper:确保类型安全
  2. 大数据量配合 Virtual:安装 @tanstack/react-virtual 实现虚拟滚动
  3. 服务端模式用 TanStack Query:数据获取、缓存、乐观更新一站式解决
  4. useMemo 包裹 data 和 columns:避免不必要的重渲染
  5. 选择合适的 Row Model 管线:只注册需要的功能(如只需排序就不注册分组)
  6. 利用社区 UI 封装:如果不想从零实现 UI,考虑 Material React Table 或 Mantine React Table

常见陷阱

  • ❌ 忘记 useMemo 导致每次渲染都创建新的列定义 → ✅ 始终缓存 columns
  • ❌ 客户端处理百万行数据 → ✅ 实现服务端排序/筛选/分页
  • ❌ 忽略 v8 到 v9 的类型变更 → ✅ 参考官方迁移指南
  • ❌ 试图用 TanStack Table 做 Excel 级编辑 → ✅ 这种需求应选 Handsontable

技术局限与边界

已知限制

  • 不提供任何 UI:所有的表格渲染、样式、交互都需要自行实现
  • 没有内置编辑功能:单元格编辑需要自行实现状态管理和 UI
  • 没有内置导出:CSV/Excel 导出需要自行实现或引入第三方库
  • 没有内置图表:不能在表格内嵌图表
  • 学习成本:需要深入理解 Table Instance、Row Model、Header Groups 等概念
  • 调试复杂度:无 UI 意味着所有调试都在逻辑层进行

不适用场景

  • 需要"开箱即用"的完整表格 UI(选 AG Grid 或 Handsontable)
  • 电子表格类编辑需求(选 Handsontable)
  • 需要集成图表的 BI 场景(选 AG Grid)
  • 快速原型开发,不想花时间写表格 UI

迁移注意事项

  • v8 → v9 类型系统有较大变化,需参考迁移指南
  • 从 React Table v7 迁移到 TanStack Table v8+ 是重大变更(包名、API 全变)
  • 从其他表格库迁移到 TanStack Table 意味着重写全部表格 UI

学习资源

官方文档

教程

社区资源

2026 年现状

最新版本

  • v8.21.4(2026-04-03):当前稳定版,全框架适配器同步发布
  • v9 Beta:开发中,重点改进 TypeScript 类型系统性能

发展趋势

  1. v9 TypeScript 优化:更高效的类型推导,减少 IDE 和编译器的类型计算负担
  2. TanStack Intent 整合:将 AI Agent Skills 随 npm 包分发,让 AI 编码助手更好地理解 API
  3. 框架适配器持续扩展:Lit、Alpine 等新框架的适配器持续完善
  4. 社区 UI 封装繁荣:Material React Table、Mantine React Table 等第三方 UI 方案日趋成熟

社区活跃度

  • GitHub Stars:28,200+(同类无样式表格库中最高)
  • npm 下载量:React 适配器周下载量数十万
  • 更新频率:持续活跃,bug fix 和新特性并行推进
  • 社区规模:TanStack Discord 活跃用户群体庞大

未来路线图

  • v9 正式版发布(TypeScript 类型系统重构)
  • TanStack Intent 生态成熟,AI 编码助手原生支持
  • 更多框架适配器和社区 UI 封装
  • 与 TanStack Query、TanStack Virtual 的更深度集成模式