UI Siêu Ngon

Table

Bảng dữ liệu đầy đủ tính năng: sort, fixed columns, inner scroll, custom colors, pagination.

Playground
#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
5Eva HoangQA68Pending
size
bordered
striped
hoverable
loading
rounded
<Table
  columns={columns}
  data={data}
  rowKey="id"
  hoverable
/>

Basic

Chỉ cần columns và data. Bảng tự sort nội bộ khi đặt sortable: true trên cột.

#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
5Eva HoangQA68Pending

Custom colors

headerBg / headerColor thay đổi header. bodyBg đổi nền body. hoverBg đổi màu hover hàng. Click vào ô màu để chọn màu.

Opacity: 8%
#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
5Eva HoangQA68Pending

Fixed columns

Đặt fixed: 'left' hoặc fixed: 'right' trên cột. Cần khai báo width để tính offset đúng. Cuộn ngang để thấy hiệu ứng.

#NameDeptScoreSalaryStatus
1Alice NguyenEngineering92$3,200Active
2Bob TranDesign87$2,800Active
3Carol LeManagement76$4,100Inactive
4David PhamEngineering95$3,500Active
5Eva HoangQA68$2,400Pending
6Frank BuiEngineering81$3,100Active
7Grace DoMarketing74$2,600Active
8Hank VuDesign90$2,900Inactive
9Iris NgoQA83$2,500Active
10Jack DinhEngineering97$3,800Active
11Karen NguyenHR72$2,700Pending
12Leo TrinhMarketing88$2,600Active

Inner scroll (scrollY)

scrollY giới hạn chiều cao phần body và bật cuộn dọc. Header tự động sticky.

#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
5Eva HoangQA68Pending
6Frank BuiEngineering81Active
7Grace DoMarketing74Active
8Hank VuDesign90Inactive
9Iris NgoQA83Active
10Jack DinhEngineering97Active
11Karen NguyenHR72Pending
12Leo TrinhMarketing88Active

Auto width

fullWidth={false} làm bảng co lại theo nội dung thay vì kéo dài 100%.

#NameScore
1Alice Nguyen92
2Bob Tran87
3Carol Le76
4David Pham95

Pagination

Truyền pagination prop để bật phân trang nội bộ. Table tự slice data theo trang hiện tại.

#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
14 / 12

Pagination — page size selector

pageSizeOptions hiển thị dropdown cho phép đổi số hàng mỗi trang.

#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
14 / 12

Kết hợp: scrollY + fixed columns + pagination

Các tính năng hoạt động cùng nhau: cuộn dọc giới hạn, cột ghim, phân trang.

#NameDeptScoreSalaryStatus
1Alice NguyenEngineering92$3,200Active
2Bob TranDesign87$2,800Active
3Carol LeManagement76$4,100Inactive
4David PhamEngineering95$3,500Active
5Eva HoangQA68$2,400Pending
6Frank BuiEngineering81$3,100Active
16 / 12

Loading state

loading={true} thay thế nội dung bằng skeleton rows với hiệu ứng pulse.

#NameDepartmentScoreStatus
1Alice NguyenEngineering92Active
2Bob TranDesign87Active
3Carol LeManagement76Inactive
4David PhamEngineering95Active
5Eva HoangQA68Pending
6Frank BuiEngineering81Active
7Grace DoMarketing74Active
8Hank VuDesign90Inactive
9Iris NgoQA83Active
10Jack DinhEngineering97Active
11Karen NguyenHR72Pending
12Leo TrinhMarketing88Active

Table API

PropertyTypeDefaultDescription
columns*TableColumn<T>[]Column definitions
data*T[]Row data array
rowKeystring | (row) => string | numberUnique key per row
loadingbooleanfalseShow skeleton rows
loadingRowsnumber5Skeleton row count
borderedbooleanfalseBorder every cell and the table outline
stripedbooleanfalseAlternate even-row background
hoverablebooleanfalseHighlight rows on hover
size'sm' | 'md' | 'lg''md'Cell padding preset
emptyReactNode'Không có dữ liệu'Empty-state content
captionstringCaption below the table
stickyHeaderbooleanfalsePin header row (auto-on with scrollY)
onSort(key, dir) => voidSort callback
headerBgstringCustom header background colour
headerColorstringCustom header text colour
bodyBgstringCustom table body background colour
hoverBgstringCustom row hover background colour
scrollYstring | numberMax height for inner scroll — activates vertical overflow
fullWidthbooleantrueStretch table to fill container width
paginationTablePaginationConfigEnable pagination bar
classNamestringExtra className on the wrapper

TableColumn API

PropertyTypeDefaultDescription
key*stringUnique column id, used as fallback dataIndex
title*ReactNodeHeader content
dataIndexstringRow field to read
render(value, row, index) => ReactNodeCustom cell renderer
widthstring | numberColumn width — required for fixed columns
align'left' | 'center' | 'right''left'Cell text alignment
sortablebooleanfalseEnable click-to-sort
fixed'left' | 'right'Pin column to left or right edge — requires width

TablePaginationConfig API

PropertyTypeDefaultDescription
pageSizenumber10Rows per page
totalnumberOverride total count for server-side pagination
showTotalbooleantrueShow "X–Y / Z" counter
pageSizeOptionsnumber[]Render a page-size selector with these values
onChange(page, pageSize) => voidCalled on page or size change