本文由 Huifer 撰写,TanStack Ship 的独立开发者和维护者。 自 2024 年以来,我为三款 SaaS 应用构建过分析仪表板——一款包含 12 种图表类型的营收仪表板、一款含时序数据的使用量分析面板,以及一个转化漏斗可视化。我三款都用 Recharts 搭建。2026 年 9 月 TanStack Charts 进入 alpha 后,我花了一周时间在分析面板上对它进行评估。图形语法 API 花了我 3 天才上手,但一旦理解后,其可组合性在复杂多轴图表上确实优于 Recharts。这篇文章就是我当初做评测时希望手里已有的对比。
已验证来源:TanStack Charts on npm · Recharts on npm · Chart.js on npm · TanStack Charts 公告 最近更新:2026-09-18 · 更新日志
TL;DR: 对大多数 React 应用来说,Recharts 是正确的默认选择——API 熟悉、稳定、社区庞大。TanStack Charts 适合复杂多层可视化场景,图形语法的可组合性在此处优势明显。Chart.js 面向非 React 应用或需要快速获得预置图表类型的团队。
三款库的快速概览
| 特性 | TanStack Charts | Recharts | Chart.js |
|---|---|---|---|
| 状态 | Alpha | Stable (v2.x) | Stable (v4.x) |
| 包体积(min+gzip) | ~38–45KB | ~33KB | ~45KB |
| React 19 支持 | 实验性支持 | 部分支持 (v2.11+) | N/A(原生 JS) |
| API 模型 | 图形语法 | 组件式 | 组件式 |
| 图表类型 | 由基础元素组合 | 预置组件 | 预置组件 |
| 自定义能力 | 高 | 中 | 高 |
| 学习曲线 | 陡峭 | 平缓 | 平缓 |
| 生态 | 新兴 | 庞大 | 巨型 |
| 仅限 React | 是 | 是 | 否 |
包体积
包体积是最可量化的差异化指标。数据来自 TanStack Charts 发布公告(所有 React 版本,压缩后):
| 库 | 基础折线图 | 受控套装(5 种图表类型) |
|---|---|---|
| TanStack Charts | ~29KB | ~38–45KB |
| Recharts | ~33KB | ~45–55KB |
| Chart.js | ~45KB | ~60–70KB |
| Apache ECharts | ~153KB | ~173KB |
| Observable Plot | ~83KB | ~92KB |
在生产级使用场景下,TanStack Charts 和 Recharts 处于同一量级。Chart.js 体积更大,但本身不含 React 依赖——如果不使用 React,它是这组中唯一可行的选择。
TanStack Charts 的优势在于 tree-shaking(摇树优化):由于图表由基础元素(marks、scales、channels)组合而来,只有实际使用的元素才会打包到客户端。一个仅使用 line 元素的简单折线图,体积小于配置完善的多轴图表。
API 模型:根本性差异
这是各库分化最明显的地方。
Recharts 和 Chart.js 是组件式的。 你选择一种图表类型——<LineChart>、<BarChart>、<PieChart>——然后通过 props 配置:
// Recharts — 选择图表类型,传入数据和 props
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'
function RevenueChart({ data }) {
return (
<LineChart data={data}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="month" />
<YAxis />
<Tooltip />
<Legend />
<Line type="monotone" dataKey="revenue" stroke="#10b981" />
<Line type="monotone" dataKey="costs" stroke="#ef4444" />
</LineChart>
)
}
组件对应图表类型的模式直观易懂,原型开发速度快。代价是组合两种图表类型需要嵌套或使用 ComposedChart 包装器,逐个自定义元素则需要 props 层层透传。
TanStack Charts 采用图形语法。 不再选择图表类型,而是由基础元素组合而成:marks、scales、channels 和 transforms。同样的数据,添加 line 元素就渲染折线图,添加 bar 元素就渲染柱状图,添加 point 元素就渲染散点图:
// TanStack Charts — 由基础元素组合
import { Chart, Line, XAxis, YAxis } from '@tanstack/react-charts'
function RevenueChart({ data }) {
return (
<Chart data={data} options={{
scales: {
x: { type: 'band', padding: 0.4 },
y: { type: 'linear', stacked: true },
},
}}>
<Line
dataKey="revenue"
color="#10b981"
markerType="square"
/>
<XAxis dataKey="month" />
<YAxis dataKey="revenue" />
</Chart>
)
}
学习曲线是真实存在的:图形语法与「选一个图表类型」的思维模式完全不同。但一旦理解了这些基础元素——marks 定义几何形状,scales 定义数据如何映射到位置和颜色,channels 定义数据属性如何映射到视觉属性——可组合性就真正展现出威力。热力图和散点图共用相同的坐标轴和数据,只需把 point 元素换成 cell 元素即可。
React 19 兼容性
如果现在已经在用 React 19,这会很重要:
- TanStack Charts:实验性 React 19 支持。核心库以 React 19 作为 peer dependency。Server Components 集成预计仍有粗糙之处。
- Recharts:v2.11+ 部分兼容 React 19。
ResponsiveContainer在 React 19 并发渲染下存在已知问题——如果使用它,请仔细测试。 - Chart.js:原生 JS,React 版本无关。在 React 19 中使用无任何兼容性顾虑。
对于基于 React 19 的新项目,TanStack Charts 和 Chart.js 路径最干净。Recharts 需要做版本检查。
何时选择哪款
选择 Recharts 当:
- 需要用熟悉的组件 API 快速交付
- 图表类型为标准类型:折线、柱状、饼图、面积图
- 团队已熟悉 Recharts——学习成本为零
- 需要庞大的社区和 Stack Overflow 覆盖
选择 TanStack Charts 当:
- 需要多轴、多层可视化
- 需要对元素样式和数据编码进行细粒度控制
- 正在构建包含 10+ 图表类型、共享视觉语言的仪表板
- 已身处 TanStack 生态,希望保持一致的心智模型
选择 Chart.js 当:
- 不使用 React
- 需要预置图表类型且配置极简
- 需要最大的社区规模和最多的 Stack Overflow 答案
- 需要 canvas 渲染来处理超大数据集(>10k 数据点)
真实的学习曲线
我想坦诚地说:TanStack Charts 中的图形语法模型,我花了 3 天才感觉能产出工作代码。相比之下,Recharts API 只花了我 20 分钟。
图形语法的思维模式如下:
- Marks(元素):几何类型(line、point、bar、cell、arc)
- Scales(比例尺):数据值如何映射到位置和颜色
- Channels(通道):数据属性如何连接到视觉属性
一旦理解后,我用 4 小时为使用量分析面板构建了一个自定义热力图——这种图表原本可能需要引入第三方 Recharts 扩展。可组合性在复杂仪表板中确实能兑现价值。
对于一个只有 5 种图表类型的标准 SaaS 仪表板,这笔学习投入可能不值得。对于数据密集的分析产品,TanStack Charts 能值回票价。
相关阅读: Tanstack Charts Best React Visualization 2026 · React Router V7 Vs Tanstack Router 2026 · Tanstack Ship Review 2026
生产环境注意事项
稳定性: TanStack Charts 仍为 alpha。API 尚未稳定。在将其用于已上线产品前,请在 package.json 中锁定精确版本,并在每次升级时查阅 changelog。
可访问性: Recharts 内置可访问性 props。TanStack Charts 依赖 SVG DOM 结构供屏幕阅读器使用。对于受监管行业(医疗、金融),在确定采用前请审查其可访问性输出。
Canvas vs SVG: TanStack Charts 和 Chart.js 支持 canvas 渲染。Recharts 仅支持 SVG。对于包含 5,000+ 数据点的图表,canvas 渲染速度明显更快——Recharts 在大数据集上会出现卡顿。
TanStack Charts 可在 TanStack Ship 中作为可选可视化层使用。 查看 TanStack 生态全景对比,以及 TanStack Charts 如何融入分析仪表板模式。