Skip to content

Table

Table 用于展示结构化数据。它是一个基于 Box 的数据容器,内部保留语义化表格结构,并支持 sx、选择、分页、空态和 loading。

Basic

没有传入 columns 时,Table 会根据第一条数据自动生成列。

Render

通过 columns.render 可以自定义单元格内容。

Column

也可以使用 Table.Column 组合式声明列。未传入 columns 时,Table 会从 children 中提取 Table.Column 作为列配置。

Selection

rowSelection 支持受控选择、全选、半选和禁用行。

Pagination

pagination 会使用本库 Pagination 渲染页码,并对 dataSource 做前端分页。

States

Table 继承 Boxloading 能力,也支持自定义空态。

SX Styling

Table 和列配置均支持 sx

常见场景

基础展示

用于页面主体、列表项或卡片中直接展示 Table 的默认形态。

状态与数据驱动

当内容来自接口或业务状态时,优先把状态转换为组件 props,再交给 Table 渲染。

样式组合

需要贴近业务页面时,通过 classNameclassstylesx 做局部覆盖。

Usage

tsx
import { Table, type TableColumn } from "@ldkj/web-ui";

type User = {
  id: number;
  name: string;
  role: string;
};

const columns: TableColumn<User>[] = [
  { dataIndex: "name", title: "姓名" },
  { dataIndex: "role", title: "角色" },
];

export function Example() {
  return <Table rowKey="id" columns={columns} dataSource={data} />;
}

组合式列:

tsx
import { Table } from "@ldkj/web-ui";

export function ColumnExample() {
  return (
    <Table rowKey="id" dataSource={data}>
      <Table.Column dataIndex="name" title="姓名" />
      <Table.Column dataIndex="role" title="角色" />
    </Table>
  );
}

API

Table

属性说明类型默认值
columns列配置TableColumn<T>[]自动推导
dataSource数据源T[][]
rowKey行 keykeyof T | (record, index) => Key"id"
size单元格尺寸"sm" | "md" | "lg""md"
variant容器样式"outlined" | "filled" | "ghost""outlined"
striped是否显示斑马纹booleanfalse
bordered是否显示列分割线booleanfalse
hoverable是否显示行 hover 效果booleantrue
stickyHeader表头是否吸顶booleanfalse
loading加载态booleanfalse
empty空态内容React.ReactNode"暂无数据"
caption表格标题React.ReactNode-
indexColumn是否展示序号列boolean | { title; width }false
rowSelection行选择配置TableRowSelection<T>-
pagination分页配置,传 false 可关闭false | TablePaginationConfig-
tableProps透传给内部 tableBoxProps<"table">-
headProps透传给内部 theadBoxProps<"thead">-
bodyProps透传给内部 tbodyBoxProps<"tbody">-
rowProps行属性或行属性生成函数BoxProps<"tr"> | (record) => props-
sxCSS-in-JS 样式入口SxProps-
children可包含 Table.Column 或后置内容React.ReactNode-

TableColumn / Table.Column

属性说明类型默认值
key列 keyReact.Key-
dataIndex数据字段keyof T | string-
title表头内容React.ReactNode-
hidden是否隐藏列booleanfalse
width列宽number | string-
align单元格对齐"left" | "center" | "right""left"
headerAlign表头对齐"left" | "center" | "right"跟随 align
className单元格类名string-
headerClassName表头类名string-
sx单元格样式SxProps-
headerSx表头样式SxProps-
render自定义渲染(value, record, index) => ReactNode-

TableRowSelection

属性说明类型默认值
selectedRowKeys受控选中行React.Key[]-
defaultSelectedRowKeys默认选中行React.Key[][]
onChange选择变化回调(keys, rows) => void-
getCheckboxProps获取复选框属性(record, index) => props-

TablePaginationConfig

属性说明类型默认值
page当前页number-
defaultPage默认当前页number1
pageSize每页条数number数据总数
total总条数numberdataSource.length
onPageChange页码变化回调(page, pageSize) => void-
position分页位置"left" | "center" | "right""right"

行为规则 / 优先级

  • 数据展示组件只负责渲染当前输入,不在内部请求数据。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Table 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • Table 适合轻量数据展示;复杂表格能力由 DataGrid 承担。
  • 分页目前基于 dataSource 做前端分页;服务端分页可以通过受控 pagination.page 与外部数据请求组合。
  • rowKey 建议显式传入稳定字段。