Giới thiệu TanStack Table
TanStack Table (trước đây là React Table) là một headless table library — một trong những thư viện quản lý bảng dữ liệu mạnh mẽ nhất cho React.“Headless” nghĩa là gì? Thư viện không có giao diện sẵn — bạn tự xây dựng mọi thứ. Giống như có bộ xương nhưng chưa có da và thịt. Nhờ vậy bạn tự do thiết kế UI, không bị giới hạn bởi style có sẵn.
- 📦 Không có UI - bạn tự xây dựng giao diện
- 🔧 Linh hoạt - tích hợp với bất kỳ UI framework nào (shadcn/ui, Material-UI, v.v.)
- ⚡ Hiệu năng cao - tối ưu hóa render, chỉ update những gì cần thiết
- 🎯 Tính năng mạnh mẽ - sắp xếp, lọc, phân trang, gom nhóm, ghim cột…
- 📱 Đa nền tảng - hỗ trợ React, Vue, Angular, Svelte…
Tính năng Chính
Quản lý cột (Column Management)
Sắp xếp thứ tự cột (Column Ordering)
Sắp xếp thứ tự cột (Column Ordering)
Cho phép kéo thả để thay đổi thứ tự các cột trong bảng. Người dùng có thể tự do sắp xếp lại vị trí các cột theo ý muốn.Prompt mẫu:
Ghim cột (Column Pinning)
Ghim cột (Column Pinning)
Ghim một hoặc nhiều cột ở bên trái hoặc bên phải. Khi cuộn ngang, các cột được ghim sẽ luôn hiển thị.Prompt mẫu:
Thay đổi kích thước cột (Column Sizing)
Thay đổi kích thước cột (Column Sizing)
Người dùng kéo mép cột để thay đổi độ rộng. Hỗ trợ cả resize tự động và resize thủ công.Prompt mẫu:
Ẩn/hiện cột (Column Visibility)
Ẩn/hiện cột (Column Visibility)
Bật tắt hiển thị từng cột. Hữu ích khi bảng có nhiều cột và người dùng muốn tập trung vào một số cột nhất định.Prompt mẫu:
Xử lý dữ liệu (Data Manipulation)
Sắp xếp (Sorting)
Sắp xếp (Sorting)
Sắp xếp dữ liệu theo một hoặc nhiều cột. Click vào header để sort tăng dần, giảm dần, hoặc huỷ sort.Prompt mẫu:
Lọc (Filtering)
Lọc (Filtering)
Lọc dữ liệu theo từng cột hoặc lọc toàn bộ bảng. Hỗ trợ nhiều kiểu lọc: text, number, date, fuzzy matching.Prompt mẫu:
Gom nhóm (Grouping)
Gom nhóm (Grouping)
Gom các dòng có cùng giá trị vào một nhóm. Có thể gom theo một hoặc nhiều cột.Prompt mẫu:
Tổng hợp (Aggregation)
Tổng hợp (Aggregation)
Tính toán giá trị tổng, trung bình, count, min, max cho mỗi nhóm hoặc toàn bộ bảng.Prompt mẫu:
Mở rộng/thu gọn dòng (Expanding)
Mở rộng/thu gọn dòng (Expanding)
Hiển thị chi tiết của một dòng bằng cách mở rộng nó. Hữu ích cho dữ liệu có quan hệ cha-con.Prompt mẫu:
Phân trang (Pagination)
Phân trang phía client (Client-side)
Phân trang phía client (Client-side)
Chia dữ liệu thành nhiều trang ở phía trình duyệt. Phù hợp khi dữ liệu đã load đầy đủ.Prompt mẫu:
Phân trang phía server (Server-side)
Phân trang phía server (Server-side)
Chỉ load dữ liệu của trang hiện tại từ server. Phù hợp khi dữ liệu rất lớn (hàng nghìn hoặc hàng triệu dòng).Prompt mẫu:
Chọn dòng (Row Selection)
Chọn một hoặc nhiều dòng
Chọn một hoặc nhiều dòng
Dùng checkbox để chọn dòng. Hỗ trợ chọn tất cả, chọn một phần, chọn dòng lồng nhau.Prompt mẫu:
Ghim dòng (Row Pinning)
Ghim dòng (Row Pinning)
Ghim một hoặc nhiều dòng ở trên cùng hoặc dưới cùng của bảng. Hữu ích để giữ các dòng quan trọng luôn hiển thị.Prompt mẫu:
Hiệu năng (Performance)
Virtual Scrolling
Virtual Scrolling
Chỉ render những dòng đang hiển thị trên màn hình. Cho phép hiển thị hàng triệu dòng mà không bị chậm.Prompt mẫu:
Cài đặt
Các tính năng nâng cao
Faceting — đếm giá trị duy nhất
Faceting giúp bạn biết có bao nhiêu giá trị khác nhau trong một cột. Ví dụ: cột “Status” có thể có 3 dòng “active” và 2 dòng “inactive”. Faceting trả về thông tin này để bạn hiển thị bộ lọc dạng dropdown với số lượng. Prompt mẫu:Click-outside và Keyboard Navigation
TanStack Table hỗ trợ điều hướng bằng bàn phím (phím mũi tên di chuyển giữa các ô, Enter để chọn…) và detect click outside để đóng dropdown, popup. Các tính năng này được bật mặc định khi sử dụng các row models có sẵn.Tích hợp với shadcn/ui
TanStack Table là “bộ não” xử lý dữ liệu, còn shadcn/ui cung cấp giao diện bảng đẹp sẵn. Khi kết hợp, bạn có cả logic mạnh mẽ lẫn UI chuyên nghiệp. shadcn/ui cung cấp các component:Table, TableHeader, TableBody, TableHead, TableRow, TableCell. Bạn dùng chúng thay cho thẻ HTML <table> thông thường.
Prompt mẫu:
API Utilities
Các hàm tiện ích của TanStack Table:| Hàm | Mô tả |
|---|---|
getCoreRowModel() | Logic xử lý cơ bản của bảng |
getSortedRowModel() | Hỗ trợ sắp xếp cột |
getFilteredRowModel() | Hỗ trợ lọc dữ liệu |
getPaginationRowModel() | Hỗ trợ phân trang |
getGroupedRowModel() | Hỗ trợ gom nhóm |
getExpandedRowModel() | Hỗ trợ mở rộng/thu gọn dòng |
getSelectedRowModel() | Hỗ trợ chọn dòng |
getVisibilityRowModel() | Hỗ trợ ẩn/hiện cột |
getColumnSizingRowModel() | Hỗ trợ thay đổi kích thước cột |
Best Practices
Tối ưu columns với useMemo
Dùng
useMemo để định nghĩa columns không bị tính lại mỗi lần render, giúp bảng hoạt động mượt hơn.Phân trang cho dữ liệu lớn
Dùng server-side pagination thay vì load toàn bộ dữ liệu nếu bảng có hàng nghìn dòng trở lên.
Khai báo TypeScript types
Luôn khai báo kiểu dữ liệu cho bảng (interface/object) để TypeScript hỗ trợ autocomplete và bắt lỗi.
Xử lý trạng thái loading và error
Luôn hiển thị trạng thái đang tải và lỗi khi fetch dữ liệu từ API.
Plugins & Extensions
TanStack Table có hệ sinh thái plugins cho nhiều framework:- @tanstack/react-table - Core library cho React
- @tanstack/match-sorter-utils - Fuzzy filtering (lọc mờ, không cần khớp chính xác)
- @tanstack/solid-table - Hỗ trợ Solid.js
- @tanstack/vue-table - Hỗ trợ Vue 3
- @tanstack/svelte-table - Hỗ trợ Svelte
Thuật ngữ
Những thuật ngữ thường gặp khi làm việc với TanStack Table:| Thuật ngữ | Giải thích |
|---|---|
| ColumnDef | Định nghĩa cột — khai báo cột hiển thị gì, format ra sao, có thể sort/filter không |
| SortingState | Trạng thái sắp xếp — lưu cột nào đang sort, theo thứ tự nào |
| Row Model | Công thức xử lý dữ liệu: sort, filter, phân trang, chọn dòng… |
| Global Filter | Thanh tìm kiếm tìm trên tất cả các cột cùng lúc |
| Pagination | Phân trang — chia dữ liệu thành nhiều trang để xem |
| Row Selection | Chọn dòng — dùng checkbox để chọn một hoặc nhiều dòng |
| Column Visibility | Ẩn/hiện cột — bật tắt hiển thị từng cột |
| Column Pinning | Ghim cột — cố định cột ở trái/phải khi cuộn ngang |
| Virtual Scrolling | Chỉ render dòng đang hiển thị — giúp bảng lớn vẫn mượt |
Cách Prompt với Claude Code
Dưới đây là các prompt mẫu bạn có thể dùng trực tiếp để yêu cầu Claude Code tạo bảng TanStack Table.Tài nguyên
- Official Website: https://tanstack.com/table
- GitHub: https://github.com/TanStack/table
- Documentation: https://tanstack.com/table/v8/docs
- Examples: https://github.com/TanStack/table/tree/main/examples
- Discord Community: https://tanstack.com/discord