强大的无头UI表格库:TanStack Table!Github Star达到了惊人的25K!

在构建现代化 Web 应用时,表格数据网格是常见的 UI 组件,特别是在处理大量数据或需要复杂交互时,选择合适的表格库尤为重要。TanStack Table 是一款功能强大的 Headless UI 表格库,支持 TypeScript/JavaScriptReactVueSolidQwikSvelte 等多种框架。它提供了极高的灵活性和扩展性,适用于各种复杂的数据展示需求。它不仅可以处理简单的表格,还能够通过其高度可扩展的 API 满足复杂的数据网格需求。无论是分页排序过滤,还是多维分组虚拟滚动,它都能灵活应对,同时保持高效的性能表现。

今天,我们将深入介绍 TanStack Table,分析其显著特性、使用方式及适用场景,探讨为什么它是各大前端框架开发者的不二选择。

显著特性

  • 支持React、Vue、Solid 的一流框架绑定
  • ~15kb 或更少(使用 tree-shaking)
  • 100% TypeScript(但不是必需的)
  • 无头(100% 可定制,自带 UI)
  • 自动开箱即用,选择加入可控状态
  • 过滤器(列和全局)
  • 排序(多列、多方向)
  • 分组和聚合
  • 旋转(即将推出!)
  • 行选择
  • 行扩展
  • 列可见性/排序/固定/调整大小
  • 表分割
  • 可动画化
  • 可虚拟化
  • 服务器端/外部数据模型支持

为什么选择 TanStack Table?

  1. 多框架兼容,适用广泛

TanStack Table 支持多种前端框架,不管你是使用 React、Vue,还是新兴的 Solid 和 Svelte,都可以无缝集成。这种跨框架的能力使得它在不同技术栈项目中都非常适用。

  1. 轻量高效,性能优越

与其他捆绑了大量 UI 元素和功能的表格库不同,TanStack Table 保持了核心的轻量化,同时提供丰富的功能模块供按需加载。它的虚拟滚动功能在处理大数据集时尤为出色,确保用户交互的流畅性。

  1. 无 UI 限制,自定义能力强

对于那些需要高度定制化的项目,TanStack TableHeadless架构提供了极大的灵活性。你可以根据项目的具体需求,自由选择和设计表格的外观,而不被库自带的 UI 所限制。

  1. 扩展性强,满足复杂需求

无论是简单的数据展示,还是复杂的数据网格应用,TanStack Table 的插件扩展机制和高度可定制的 API 都能满足你的需求。你可以在不修改核心代码的情况下,快速实现复杂的功能需求。

适用场景

  1. 跨框架项目

TanStack Table 不局限于单一框架,它支持多种前端框架,如 React、Vue、Svelte、Solid 等,非常适合那些跨框架或需要高复用性的项目。

  1. 处理大数据集的应用

TanStack Table 轻量且支持虚拟滚动,在处理大数据集时,它能够仅渲染可视区域的数据,极大提升了性能表现。特别适合电商、管理系统等需要展示大量数据的应用场景。

  1. 需要高度定制表格样式的项目

如果项目对表格的外观有特定要求,TanStack Table 的无 UI 设计让你可以自由定制表格样式。结合你喜欢的 UI 库或自定义组件,打造完全符合需求的表格组件。

  1. 数据网格和复杂交互的场景

TanStack Table 提供了丰富的 API 和插件机制,支持复杂的数据交互逻辑,比如多维分组拖拽排序等功能,非常适合在 SaaS管理系统等需要处理复杂数据的场景中使用。

使用方式

安装

npm install @tanstack/vue-table

使用组件

比如,要实现上述复杂表格效果,需要用到的应用代码如下:

<script setup lang="ts">
import {
FlexRender,
getCoreRowModel,
useVueTable,
createColumnHelper,
} from '@tanstack/vue-table'
import { ref } from 'vue' type Person = {
firstName: string
lastName: string
age: number
visits: number
status: string
progress: number
} const defaultData: Person[] = [
{
firstName: 'tanner',
lastName: 'linsley',
age: 24,
visits: 100,
status: 'In Relationship',
progress: 50,
},
{
firstName: 'tandy',
lastName: 'miller',
age: 40,
visits: 40,
status: 'Single',
progress: 80,
},
{
firstName: 'joe',
lastName: 'dirte',
age: 45,
visits: 20,
status: 'Complicated',
progress: 10,
},
] const columnHelper = createColumnHelper<Person>() const columns = [
columnHelper.group({
header: 'Name',
footer: props => props.column.id,
columns: [
columnHelper.accessor('firstName', {
cell: info => info.getValue(),
footer: props => props.column.id,
}),
columnHelper.accessor(row => row.lastName, {
id: 'lastName',
cell: info => info.getValue(),
header: () => 'Last Name',
footer: props => props.column.id,
}),
],
}),
columnHelper.group({
header: 'Info',
footer: props => props.column.id,
columns: [
columnHelper.accessor('age', {
header: () => 'Age',
footer: props => props.column.id,
}),
columnHelper.group({
header: 'More Info',
columns: [
columnHelper.accessor('visits', {
header: () => 'Visits',
footer: props => props.column.id,
}),
columnHelper.accessor('status', {
header: 'Status',
footer: props => props.column.id,
}),
columnHelper.accessor('progress', {
header: 'Profile Progress',
footer: props => props.column.id,
}),
],
}),
],
}),
] const data = ref(defaultData) const rerender = () => {
data.value = defaultData
} const table = useVueTable({
get data() {
return data.value
},
columns,
getCoreRowModel: getCoreRowModel(),
})
</script> <template>
<div class="p-2">
<table>
<thead>
<tr
v-for="headerGroup in table.getHeaderGroups()"
:key="headerGroup.id"
>
<th
v-for="header in headerGroup.headers"
:key="header.id"
:colSpan="header.colSpan"
>
<FlexRender
v-if="!header.isPlaceholder"
:render="header.column.columnDef.header"
:props="header.getContext()"
/>
</th>
</tr>
</thead>
<tbody>
<tr v-for="row in table.getRowModel().rows" :key="row.id">
<td v-for="cell in row.getVisibleCells()" :key="cell.id">
<FlexRender
:render="cell.column.columnDef.cell"
:props="cell.getContext()"
/>
</td>
</tr>
</tbody>
<tfoot>
<tr
v-for="footerGroup in table.getFooterGroups()"
:key="footerGroup.id"
>
<th
v-for="header in footerGroup.headers"
:key="header.id"
:colSpan="header.colSpan"
>
<FlexRender
v-if="!header.isPlaceholder"
:render="header.column.columnDef.footer"
:props="header.getContext()"
/>
</th>
</tr>
</tfoot>
</table>
<div class="h-4" />
<button @click="rerender" class="border p-2">Rerender</button>
</div>
</template> <style>
html {
font-family: sans-serif;
font-size: 14px;
} table {
border: 1px solid lightgray;
} tbody {
border-bottom: 1px solid lightgray;
} th {
border-bottom: 1px solid lightgray;
border-right: 1px solid lightgray;
padding: 2px 4px;
} tfoot {
color: gray;
} tfoot th {
font-weight: normal;
}
</style>

结语

TanStack Table 作为一款跨框架的强大表格库,凭借其高性能、轻量化和极致的定制能力,成为了现代 Web 开发中的理想选择。无论是在 React、Vue,还是其他前端框架中,它都能灵活应对复杂的数据展示和交互需求。如果你正在寻找一个可以满足从简单到复杂应用场景的表格库,TanStack Table 无疑是你的不二选择。


该框架已经收录到我的全栈前端一站式开发平台 “前端视界” 中(浏览器搜 前端视界 第一个),感兴趣的欢迎浏览使用!

强大的无头UI表格库:TanStack Table!Github Star达到了惊人的25K!的更多相关文章

  1. 前端笔记之Vue(四)UI组件库&Vuex&虚拟服务器初识

    一.日历组件 new Date()的月份是从0开始的. 下面表达式是:2018年6月1日 new Date(2018, 5, 1); 下面表达式是:2018年5月1日 new Date(2018, 4 ...

  2. 造个自己的Vue的UI组件库类似Element

    前言 随着前端的三大框架的出现,组件化的思想越来越流行,出现许多组件库.它能够帮助开发者节省时间提高效率, 如React的Ant-design,Vue的iView,Element等,它们的功能已经很完 ...

  3. Android主流UI开源库整理(转载)

    http://www.jianshu.com/p/47a4a7b99364 标题隐含了两个层面的意思,一个是主流,另一个是UI.主流既通用,一些常规的按钮.Switch.进度条等控件都是通用控件,因此 ...

  4. UI标签库的话题:JEECG智能开发平台 BaseTag(样式表和JS标签的引入)

    UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签) 1.BaseTag(样式表和JS引入标签) 1.1. 演示样例 <t:base type="jquer ...

  5. 16款优秀的Vue UI组件库推荐

    16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基 ...

  6. [转载]前端——实用UI组件库

    https://www.cnblogs.com/xuepei/p/7920888.html Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https:/ ...

  7. 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))

    首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docxfrom docx import Document #导入库 path ...

  8. 【转】前端——实用UI组件库

    Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

  9. 前端——实用UI组件库

    Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

  10. Android(常用)主流UI开源库整理

    这几天刚做完一个项目..有点空余时间,就想着吧这一两年做的项目中的UI界面用到的一些库整理一下.后来想了一下,既然要整理,就把网上常用的 AndroidUI界面的主流开源库 一起整理一下,方便查看. ...

随机推荐

  1. 计算机硕博如何快速毕业 —— “你们都说白狐是妖孽,它明明是祥瑞。” —— 请评价一下MDPI旗下的期刊质量如何?

    MDPI是一个出版集团或者说是一个出版公司,其下辖多个开放期刊. 相关: https://www.zhihu.com/question/384813035/answer/1520065909 Sens ...

  2. 智能机器人(双足机器人、四足机器人、人形机器人humanoid)与自动驾驶技术/FSD(Full Self-Drive)“完全自动驾驶”在技术领域的相关性?

    前文: https://www.cnblogs.com/devilmaycry812839668/p/18079439 前文中已经说了,对于能力强大的机器人公司来说,软件和AI技术并不是难点,真正的难 ...

  3. 【转载】 在Ubuntu环境下,搜狗输入法乱码问题的解决

    原文作者:高坦的博客 | Tan's Blog 原文链接:https://www.cnblogs.com/gtscool/p/12234104.html本文采用 BY-NC-SA 许可协议.转载请注明 ...

  4. 代码随想录Day8

    344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 \(O(1)\) 的额外空间解决 ...

  5. (数据科学学习手札163)ibis:极具潜力的Python数据分析框架

    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,今天要给大家介绍的Pyt ...

  6. css 优惠券波浪线效果

    <ul> <li> <i class="left"></i><span class="center"> ...

  7. 23 暑假友谊赛 No.4(UKIEPC 2017)

    23 暑假友谊赛 No.4(UKIEPC 2017) Problem A Alien Sunset hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分 ...

  8. 玩转内核链表list_head,3个超级哇塞的的例子

    在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head.虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作li ...

  9. ES7.5.2索引生命周期管理(附操作示例)

    一.前言 es可以用来存储日志,一般日志存储只是短期保存,超过一定时间日志要是能自动删除最好,这样保证索引文档不会过多,查询时效性也能得到保证.本文参考的官网地址是:https://www.elast ...

  10. 基于docker搭建单机测试ELK

    说明:本次使用的windows系统,利用vm进行安装虚拟机,安装的只是单测试单机版elk. 一.下载vm 自行官网下载 二.安装centos7系统 自己有现成的镜像跳过,没有自行查找资料完成 三.进行 ...