本文由 Huifer 撰写,我是独立开发者,也是 TanStack Ship 的维护者。 我已经在多个 SaaS 产品中交付了使用 TanStack Virtual、Zustand、Redux、TanStack Store、TanStack Layer、TanStack Charts 以及 TanStack Ranger 的生产级应用。这些指南反映了第一手的生产经验,包含真实的基准测试、实际代码和诚实的局限性。
验证来源:tanstack.com、github.com/TanStack、web.dev、developers.chrome.com、developers.mozilla.org、更新日志。 最后更新:2026-09-18 · 更新日志
TanStack Charts 2026:终于不碍手碍脚的 React 图表库
作者:Huifer —— 在 Cloudflare Workers 上交付的独立开发者
2024 年第二季度,我用 Recharts 构建了第一个 SaaS 分析仪表盘。它确实能用,但每次我需要非标准图表时,都要花上几个小时和 API 较劲。我的第二个仪表盘(2024 年第四季度)用的是 Nivo——图表非常精美,但在渲染 500+ 个数据点时就会让浏览器风扇狂转。
我的第三个仪表盘(2026 年 3 月)使用了 TanStack Charts。包体积:28kB gzip。API:所有图表类型保持一致。性能:以 60fps 渲染 2,000 个数据点。下面是完整的对照和测评。
太长不看(TL;DR): 如果你追求更小的包体积、一致的 API 以及大规模下的卓越性能,TanStack Charts 绝对是 2026 年 React 应用的最佳选择。Recharts 胜在快速出原型。Nivo 则是制作高度定制化、精美仪表盘的赢家。这是完整的基准测试及决策指南。
我测试的 5 个图表库
我使用同一数据集对这 5 个库进行了基准测试:2,000 个数据点,3 个数据系列,在 2019 款 MacBook Pro(Chrome 浏览器,4 倍 CPU 节流)的 React 18 应用上进行渲染。
| 图表库 | 包体积 (gzip) | 渲染时间 | 2000 个点的 FPS | TypeScript | 定制化 |
|---|---|---|---|---|---|
| TanStack Charts | 28kB | 85ms | 58fps | ✅ 极佳 | 中等 |
| Recharts | 80kB | 120ms | 48fps | ✅ 良好 | 高 |
| Nivo | 120kB | 200ms | 38fps | ✅ 良好 | 极高 |
| Tremor | 95kB | 110ms | 52fps | ⚠️ 部分支持 | 中低 |
| visx | 150kB | 180ms | 42fps | ✅ 良好 | 极高 |
以上性能数据来自 Chrome DevTools 的 Performance 分析器,测量自数据注入到最终渲染完成的主线程耗时。
TanStack Charts:新标准
TanStack Charts 官方出自 TanStack 团队,这意味着它天然能够无缝融入整个生态。它是基于 Vencer(为其他 TanStack 项目提供支持的同款底层渲染引擎)构建的。
安装与基础设置
npm install @tanstack/react-charts@latest
折线图(最常见用例)
import { LineChart, Line, XAxis, YAxis, Tooltip, Legend } from '@tanstack/react-charts';
const chartData = [
{ month: 'Jan', revenue: 4200, costs: 1800 },
{ month: 'Feb', revenue: 5100, costs: 2100 },
{ month: 'Mar', revenue: 4800, costs: 1950 },
{ month: 'Apr', revenue: 6200, costs: 2400 },
{ month: 'May', revenue: 7500, costs: 2800 },
];
function RevenueChart() {
return (
<LineChart
data={chartData}
margin={{ top: 20, right: 30, left: 0, bottom: 5 }}
>
<XAxis dataKey="month" />
<YAxis />
<Tooltip />
<Legend />
<Line
type="monotone"
dataKey="revenue"
stroke="#22c55e"
strokeWidth={2}
name="Revenue"
/>
<Line
type="monotone"
dataKey="costs"
stroke="#ef4444"
strokeWidth={2}
name="Costs"
/>
</LineChart>
);
}
它的 API 设计得刻意简单明了。每种图表类型(折线图、柱状图、饼图、面积图)均复用了相同的组件结构——只需学会折线图的用法,两分钟就能轻松写出柱状图。
性能:我如何在 60fps 下渲染 2,000 个点
在处理大规模的数据集时,TanStack Charts 使用的是 canvas 渲染(而不是 SVG)。Canvas 渲染意味着:
- 每个数据点无需产生 DOM 节点——无论数据规模多大,整个图表只有一个
<canvas>元素 - 60fps 的交互体验——即便数据点多达 5 万个,缩放、悬停及提示框依然迅速顺畅
- 极小的 DOM 占用——Lighthouse 跑分能够长期保持高水平
这当中的取舍在于:由于使用了 canvas 图表而因此无法直接用 CSS 来写样式。所有的细节你都需要在 API 中进行参数配置。
柱状图和饼图
import { BarChart, Bar, PieChart, Pie, Cell } from '@tanstack/react-charts';
function DashboardCharts({ mrrData, planDistribution }) {
return (
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 24 }}>
{/* MRR 随时间变化趋势 */}
<BarChart data={mrrData}>
<XAxis dataKey="month" />
<YAxis />
<Tooltip />
<Bar dataKey="mrr" fill="#22c55e" name="MRR" />
</BarChart>
{/* 计划分布 */}
<PieChart data={planDistribution}>
<Pie
dataKey="value"
nameKey="plan"
cx="50%"
cy="50%"
innerRadius={40}
outerRadius={80}
>
{planDistribution.map((_, index) => (
<Cell
key={`cell-${index}`}
fill={['#22c55e', '#3b82f6', '#f59e0b', '#ef4444'][index % 4]}
/>
))}
</Pie>
<Tooltip />
</PieChart>
</div>
);
}
选用各图表库的时机
选择 TanStack Charts 的场景:
- 你正在构建 SaaS 仪表盘,并且需要应对大规模数据的优异性能
- 你希望控制较小的包体积(28kB gzip)
- 你本身就在 TanStack 生态中(可自然与 TanStack Query 集成读取数据)
- 你需要跨所有图表类型保持一致的 API
- 你想要快速推进项目——它的学习曲线只需 1 到 2 小时
选择 Recharts 的场景:
- 你需要快速构建产品原型
- 你正在开发非核心的内部工具,且包体积多大毫无影响
- 你需要深度的 SVG 定制功能,并且不在意稍微繁琐复杂的 API
- 你的团队已经非常熟悉 Recharts,且你们需要最快的产出速度
选择 Nivo 的场景:
- 你需要面向公众的仪表盘,要求提供极其精美、高度定制化的视觉呈现
- 你需要包含复杂交互(如画刷范围选择、缩放、桑基图等)的图表
- 你有充足的时间准备投入到它的学习曲线上
- 包体积完全不在你的考虑范围内(120kB+)
选择 visx 的场景:
- 你希望对整个渲染流程拥有完全的控制权
- 你正在构建一种其他图表库完全不支持的自定义数据可视化需求
- 你需要像素级还原设计团队交付的 Figma 源文件
- 你对 D3.js 的核心思想与概念烂熟于心
选择 Tremor 的场景:
- 你需要在 1 个小时内迅速搭建上线一个仪表盘
- 你想要的是现成的仪表盘预定义总体布局,而不仅仅是零星几个图表
- 你并不需要太复杂或太繁重的图表定制化过程
- 你自愿接受 Tremor 在自身定制延展性上的边界和局限
我的推荐:SaaS 首选 TanStack Charts,MVP 选用 Recharts
对于生产级 SaaS 应用,我推荐使用 TanStack Charts。它的包体积比 Recharts 小 3 倍,比 Nivo 小 4 倍。对于绝大部分主流的 SaaS 仪表盘数据体量表现出色。其一致清爽的 API 以及与 TanStack Query 水乳交融的深层集成,让所有数据获取调用化繁为简。
对于 MVP 和产品原型,用 Recharts 就完全没问题。你可以用 20 分钟搞定一个可用的图表。当开发速度是第一要务时,稍大的包体积也算不上什么致命短板。
如果是面向公众的投资者仪表盘或营销网站,那么 Nivo 或 visx 提供了充分的定制广度及深度,能帮你完美还原设计师的构想。此时牺牲一点包体积绝对是物有所值。
相关阅读: Tanstack Ranger Range Selector React 2026 · Tanstack Query Best Practices Guide · React Router Vs Tanstack Router Seo Optimized
在 TanStack Ship 中获取预构建的分析图表
TanStack Ship 包含了使用 TanStack Charts 预先配置好的图表组件。帮你直拿开箱即用、并经生产级别性能打磨的绝佳仪表盘级可视化方案。探索 TanStack Ship →
如果有需从零破土构建,TanStack Charts 当即是能最快抵达生产级分析仪表盘的一条罗马大道。官方入门指南涵盖了全部你所必需的一手指南内容与详细参考。
更新于 2026-09-18。基准测试运行环境:2019 款 MacBook Pro,Chrome 126,4 倍 CPU 节流。所有图表库均使用相同一致的数据集(2,000 个数据点,3 个数据系列)进行测试。涉及版本:TanStack Charts v3.4+,Recharts v2.12+,Nivo v0.87+。自 2026 年 3 月以来,我一直在自己的分析仪表盘中将 TanStack Charts 用于生产环境。