JGuang

表格

Table · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

表格

展示行列数据。

何时使用

  • 当有大量结构化的数据需要展现时;
  • 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。

如何使用

指定表格的数据源 dataSource 为一个数组。

const dataSource = [
  {
    key: '1',
    name: '胡彦斌',
    age: 32,
    address: '西湖区湖底公园1号',
  },
  {
    key: '2',
    name: '胡彦祖',
    age: 42,
    address: '西湖区湖底公园1号',
  },
];

const columns = [
  {
    title: '姓名',
    dataIndex: 'name',
    key: 'name',
  },
  {
    title: '年龄',
    dataIndex: 'age',
    key: 'age',
  },
  {
    title: '住址',
    dataIndex: 'address',
    key: 'address',
  },
];

<Table dataSource={dataSource} columns={columns} />;

相关推荐

代码演示

  • 基本用法 · basic

  • JSX 风格的 API · jsx

  • 可选择 · row-selection

  • 选择和操作 · row-selection-and-operation

  • 自定义选择项 · row-selection-custom

  • 筛选和排序 · head

  • 树型筛选菜单 · filter-in-tree

  • 自定义筛选的搜索 · filter-search

  • 多列排序 · multiple-sorter

  • 可控的筛选和排序 · reset-filter

  • 自定义筛选菜单 · custom-filter-panel

  • 远程加载数据 · ajax

  • 紧凑型 · size

  • 带边框 · bordered

  • 可展开 · expand

  • 特殊列排序 · order-column

  • 表格行/列合并 · colspan-rowspan

  • 树形数据展示 · tree-data

  • 固定表头 · fixed-header

  • 自动高度 · auto-height

  • 固定列 · fixed-columns

  • 堆叠固定列 · fixed-gapped-columns

  • 固定头和列 · fixed-columns-header

  • 隐藏列 · hidden-columns

  • 表头分组 · grouping-columns

  • 可编辑单元格 · edit-cell

  • 可编辑行 · edit-row

  • 嵌套子表格 · nested-table

  • 拖拽排序 · drag-sorting

  • 列拖拽排序 · drag-column-sorting

  • 拖拽手柄列 · drag-sorting-handler

  • 单元格自动省略 · ellipsis

  • 统一列配置 · column-defaults

  • 自定义单元格省略提示 · ellipsis-custom-tooltip

  • 自定义空状态 · custom-empty

  • 总结栏 · summary

  • 虚拟列表 · virtual-list

  • 响应式 · responsive

  • 分页设置 · pagination

  • 随页面滚动的固定表头和滚动条 · sticky

  • 动态控制表格属性 · dynamic-settings

  • 自定义语义结构的样式和类 · style-class

API

通用属性参考:通用属性

Table

参数说明类型默认值版本全局配置
bordered是否展示外边框和列边框booleanfalse×
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-6.0.1
column统一列配置,仅在单列未声明同名属性时生效Partial<ColumnType>-6.4.0×
columns表格列的配置描述,具体项见下表ColumnsType[]-×
components覆盖默认的 table 元素TableComponents-×
dataSource数据数组object[]-×
expandable配置展开属性expandable-expandable.expandIcon: 5.14.0
footer表格尾部function(currentPageData)-×
getPopupContainer设置表格内各类浮层的渲染节点,如筛选菜单(triggerNode) => HTMLElement() => TableHtmlElement×
loading页面是否加载中boolean | Spin Propsfalse×
locale默认文案设置,目前包括排序、过滤、空数据文案object默认值×
pagination分页器,参考配置项或 pagination 文档,设为 false 时不展示和进行分页object | false-×
rowClassName表格行的类名function(record, index): string-×
rowKey表格行 key 的取值,可以是字符串或一个函数string | function(record): stringkeystring: 6.0.0,function: 6.1.0
rowSelection表格行是否可选择,配置项object-×
rowHoverable表格行是否开启 hover 交互booleantrue5.16.0×
scroll表格是否可滚动,也可以指定滚动区域的宽、高,配置项object-6.3.0
showHeader是否显示表头booleantrue×
showSorterTooltip表头是否显示下一次排序的 tooltip 提示。当参数类型为对象时,将被设置为 Tooltip 的属性boolean | Tooltip props & {target?: 'full-header' | 'sorter-icon' }{ target: 'full-header' }5.16.0×
size表格大小large | medium | smalllarge×
sortDirections支持的排序方式,取值为 ascend descendArray[ascend, descend]×
sticky设置粘性头部和滚动条boolean | {offsetHeader?: number, offsetScroll?: number, getContainer?: () => HTMLElement}-4.6.0 (getContainer: 4.7.0)×
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-6.0.1
summary总结栏(currentData) => ReactNode-×
tableLayout表格元素的 table-layout 属性,设为 fixed 表示内容不会影响列的布局- | auto | fixed无<hr />固定表头/列或使用了 column.ellipsis 时,默认值为 fixed×
title表格标题function(currentPageData)-×
virtual支持虚拟列表boolean-5.9.0×
onChange分页、排序、筛选变化时触发function(pagination, filters, sorter, extra: { currentDataSource: [], action: paginate | sort | filter })-×
onHeaderRow设置头部行属性function(columns, index)-×
onRow设置行属性function(record, index)-×
onScroll表单内容滚动时触发(虚拟滚动下只有垂直滚动会触发事件)function(event)-5.16.0×

Table ref

参数说明类型版本
nativeElement最外层 div 元素HTMLDivElement5.11.0
scrollTo滚动到目标位置(设置 key 时为 Record 对应的 rowKey)。当指定 offset 时,表格会滚动至目标行顶部对齐并应用指定的偏移量。offset 对 top 无效。可选 align 参数控制对齐方式:start 顶部对齐、center 中间对齐、end 底部对齐、nearest 智能对齐(默认)。虚拟滚动模式下不支持 center 对齐(config: { index?: number, key?: React.Key, top?: number, offset?: number, align?: 'start' | 'center' | 'end' | 'nearest' }) => void5.11.0

onRow 用法

适用于 onRow onHeaderRow onCell onHeaderCell。

<Table
  onRow={(record) => {
    return {
      onClick: (event) => {}, // 点击行
      onDoubleClick: (event) => {},
      onContextMenu: (event) => {},
      onMouseEnter: (event) => {}, // 鼠标移入行
      onMouseLeave: (event) => {},
    };
  }}
  onHeaderRow={(columns, index) => {
    return {
      onClick: () => {}, // 点击表头行
    };
  }}
/>

Column

列描述数据对象,是 columns 中的一项,Column 使用相同的 API。

参数说明类型默认值版本
align设置列的对齐方式left | right | centerleft
className列样式类名string-
colSpan表头列合并,设置为 0 时,不渲染number-
dataIndex列数据在数据项中对应的路径,支持通过数组查询嵌套路径string | string[]-
defaultFilteredValue默认筛选值string[]-
filterResetToDefaultFilteredValue点击重置按钮的时候,是否恢复默认筛选值booleanfalse
defaultSortOrder默认排序顺序ascend | descend-
ellipsis超过宽度将自动省略,暂不支持和排序筛选一起使用。<br />设置为 true 或 { showTitle?: boolean } 时,表格布局将变成 tableLayout="fixed"。boolean | { showTitle?: boolean }falseshowTitle: 4.3.0
filterDropdown可以自定义筛选菜单,此函数只负责渲染图层,需要自行编写各种交互ReactNode | (props: FilterDropdownProps) => ReactNode-
filtered标识数据是否经过过滤,筛选图标会高亮booleanfalse
filteredValue筛选的受控属性,外界可用此控制列的筛选状态,值为已筛选的 value 数组string[]-
filterIcon自定义 filter 图标。ReactNode | (filtered: boolean) => ReactNode-
filterOnClose是否在筛选菜单关闭时触发筛选booleantrue5.15.0
filterMultiple是否多选booleantrue
filterMode指定筛选菜单的用户界面'menu' | 'tree''menu'4.17.0
filterSearch筛选菜单项是否可搜索boolean | function(input, record):booleanfalseboolean:4.17.0 function:4.19.0
filters表头的筛选菜单项object[]-
filterDropdownProps自定义下拉属性,在 <5.22.0 之前可用 filterDropdownOpen 和 onFilterDropdownOpenChangeDropdownProps-5.22.0
fixed(IE 下无效)列是否固定,可选 true (等效于 'start') 'start' 'end'boolean | stringfalse
keyReact 需要的 key,如果已经设置了唯一的 dataIndex,可以忽略这个属性string-
render生成复杂数据的渲染函数,参数分别为当前单元格的值,当前行数据,行索引(value: V, record: T, index: number): ReactNode-
responsive响应式 breakpoint 配置列表。未设置则始终可见。Breakpoint[]-4.2.0
rowScope设置列范围row | rowgroup-5.1.0
shouldCellUpdate自定义单元格渲染时机(record, prevRecord) => boolean-4.3.0
showSorterTooltip表头显示下一次排序的 tooltip 提示, 覆盖 table 中 showSorterTooltipboolean | Tooltip props & {target?: 'full-header' | 'sorter-icon' }{ target: 'full-header' }5.16.0
sortDirections支持的排序方式,覆盖 Table 中 sortDirections, 取值为 ascend descendArray[ascend, descend]
sorter排序函数,本地排序使用一个函数(参考 Array.sort 的 compareFunction)。需要服务端排序可设为 true(单列排序) 或 { multiple: number }(多列排序)function | boolean | { compare: function, multiple: number }-
sortOrder排序的受控属性,外界可用此控制列的排序,可设置为 ascend descend nullascend | descend | null-
sortIcon自定义 sort 图标(props: { sortOrder }) => ReactNode-5.6.0
title列头显示文字(函数用法 3.10.0 后支持)ReactNode | ({ sortColumns, filters }) => ReactNode-
width列宽度(指定了也不生效?)string | number-
minWidth最小列宽度,只在 tableLayout="auto" 时有效number-5.21.0
hidden隐藏列booleanfalse5.13.0
onCell设置单元格属性function(record, rowIndex)-
onFilter本地模式下,确定筛选的运行函数function-
onHeaderCell设置头部单元格属性function(column)-

ColumnGroup

参数说明类型默认值
title列头显示文字ReactNode-

pagination

分页的配置项。

参数说明类型默认值
placement指定分页显示的位置, 取值为topStart | topCenter | topEnd |bottomStart | bottomCenter | bottomEnd| noneArray[bottomEnd]
position指定分页显示的位置, 取值为topLeft | topCenter | topRight |bottomLeft | bottomCenter | bottomRight | none,请使用 placement 替换Array[bottomRight]

更多配置项,请查看 Pagination。

expandable

展开功能的配置。

参数说明类型默认值版本
childrenColumnName指定树形结构的列名stringchildren
columnTitle自定义展开列表头ReactNode-4.23.0
columnWidth自定义展开列宽度string | number-
defaultExpandAllRows初始时,是否展开所有行booleanfalse
defaultExpandedRowKeys默认展开的行string[]-
expandedRowClassName展开行的 classNamestring | (record, index, indent) => string-string: 5.22.0
expandedRowKeys展开的行,控制属性string[]-
expandedRowRender额外的展开行function(record, index, indent, expanded): ReactNode-
expandIcon自定义展开图标,参考示例function(props): ReactNode-
expandRowByClick通过点击行来展开子行booleanfalse
fixed控制展开图标是否固定,可选 true 'left' 'right'boolean | stringfalse4.16.0
forceRender在展开前强制渲染展开行内容。虚拟模式下,仅强制渲染虚拟列表当前挂载的行;屏幕外的行仍可能被卸载booleanfalse6.6.0
indentSize展示树形数据时,每层缩进的宽度,以 px 为单位number15
rowExpandable设置是否允许行展开(dataSource 若存在 children 字段将不生效)(record) => boolean-
showExpandColumn是否显示展开图标列booleantrue4.18.0
onExpand点击展开图标时触发function(expanded, record)-
onExpandedRowsChange展开的行变化时触发function(expandedRows)-
expandedRowOffset废弃:展开行的偏移列数,设置后会强制将其前面的列设为固定列。请改用 Table.EXPAND_COLUMN 并通过列顺序控制位置number-5.26.0

rowSelection

选择功能的配置。

参数说明类型默认值版本
align设置选择列的对齐方式left | right | centerleft5.25.0
checkStrictlycheckable 状态下节点选择完全受控(父子数据选中状态不再关联)booleantrue4.4.0
columnTitle自定义列表选择框标题ReactNode | (originalNode: ReactNode) => ReactNode-
columnWidth自定义列表选择框宽度string | number32px
fixed把选择框列固定在左边boolean-
getCheckboxProps选择框的默认属性配置function(record)-
getTitleCheckboxProps标题选择框的默认属性配置function()-
hideSelectAll隐藏全选勾选框与自定义选择项booleanfalse4.3.0
preserveSelectedRowKeys当数据被删除时仍然保留选项的 keyboolean-4.4.0
renderCell渲染勾选框,用法与 Column 的 render 相同(checked: boolean, record: T, index: number, originNode: ReactNode): ReactNode-4.1.0
selectedRowKeys指定选中项的 key 数组,需要和 onChange 进行配合string[] | number[][]
defaultSelectedRowKeys默认选中项的 key 数组string[] | number[][]
selections自定义选择项 配置项, 设为 true 时使用默认选择项object[] | boolean-
type多选/单选checkbox | radiocheckbox
onCell设置单元格属性,用法与 Column 的 onCell 相同function(record, rowIndex)-5.5.0
onChange选中项发生变化时的回调function(selectedRowKeys, selectedRows, info: { type })-info.type: 4.21.0
onSelect用户手动选择/取消选择某行的回调function(record, selected, selectedRows, nativeEvent)-

scroll

参数说明类型默认值
scrollToFirstRowOnChange当分页、排序、筛选变化后是否滚动到表格顶部boolean-
x设置横向滚动,也可用于指定滚动区域的宽,可以设置为像素值,百分比,true 和 'max-content'string | number | true-
y设置纵向滚动,也可用于指定滚动区域的高,可以设置为像素值string | number-

selection

参数说明类型默认值
keyReact 需要的 key,建议设置string-
text选择项显示的文字ReactNode-
onSelect选择项点击回调function(changeableRowKeys)-

在 TypeScript 中使用

import React from 'react';
import { Table } from 'antd';
import type { TableColumnsType } from 'antd';

interface User {
  key: number;
  name: string;
}

const columns: TableColumnsType<User> = [
  {
    key: 'name',
    title: 'Name',
    dataIndex: 'name',
  },
];

const data: User[] = [
  {
    key: 0,
    name: 'Jack',
  },
];

const Demo: React.FC = () => (
  <>
    <Table<User> columns={columns} dataSource={data} />
    {/* 使用 JSX 风格的 API */}
    <Table<User> dataSource={data}>
      <Table.Column<User> key="name" title="Name" dataIndex="name" />
    </Table>
  </>
);

export default Demo;

TypeScript 里使用 Table 的 CodeSandbox 实例。

Semantic DOM

语义节点原生说明版本
root根元素,包含字体大小、背景色、圆角、滚动条颜色等表格容器的基础样式—
title标题元素,包含表格标题的样式和布局—
content内容元素,包含表格内容区域的样式和布局—
header.wrapper头部容器元素,包含表头的布局和容器样式—
header.row头部行元素,包含表头行的布局和样式—
header.cell头部单元格元素,包含相对定位、内边距、文字换行、背景色、文字颜色、字体权重等表头单元格样式—
section容器元素,包含清除浮动、最大宽度、滚动条背景等表格包装容器样式—
body.wrapper主体容器元素,包含表格主体的布局和容器样式—
body.row主体行元素,包含数据行的悬浮效果、选中状态、展开状态等交互样式—
body.cell主体单元格元素,包含相对定位、内边距、文字换行等数据单元格的基础样式—
footer底部元素,包含表格底部的背景色、文字颜色等样式—
pagination.root分页根元素,包含分页组件的基础样式和布局—
pagination.item分页单项元素,包含分页项的样式和交互效果—

语义说明来源: vendor/components/table/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
headerBgstring表头背景
headerColorstring表头文字颜色
headerSortActiveBgstring表头排序激活态背景色
headerSortHoverBgstring表头排序激活态悬浮背景色
bodySortBgstring表格排序列背景色
rowHoverBgstring表格行悬浮背景色
rowSelectedBgstring表格行选中背景色
rowSelectedHoverBgstring表格行选中悬浮背景色
rowExpandedBgstring表格行展开背景色
cellPaddingBlocknumber单元格纵向内间距
cellPaddingInlinenumber单元格横向内间距(默认大尺寸)
cellPaddingBlockMDnumber单元格纵向内间距(中等尺寸)
cellPaddingInlineMDnumber单元格横向内间距(中等尺寸)
cellPaddingBlockSMnumber单元格纵向内间距(小尺寸)
cellPaddingInlineSMnumber单元格横向内间距(小尺寸)
borderColorstring表格边框/分割线颜色
headerBorderRadiusnumber表头圆角
footerBgstring表格底部背景色
footerColorstring表格底部文字颜色
cellFontSizenumber单元格文字大小(默认大尺寸)
cellFontSizeMDnumber单元格文字大小(中等尺寸)
cellFontSizeSMnumber单元格文字大小(小尺寸)
headerSplitColorstring表头分割线颜色
fixedHeaderSortActiveBgstring固定表头排序激活态背景色
headerFilterHoverBgstring表头过滤按钮悬浮背景色
filterDropdownMenuBgstring过滤下拉菜单选项背景
filterDropdownBgstring过滤下拉菜单颜色
expandIconBgstring展开按钮背景色
selectionColumnWidthnumber | string选择列宽度
stickyScrollBarBgstringSticky 模式下滚动条背景色
stickyScrollBarBorderRadiusnumberSticky 模式下滚动条圆角
expandIconMarginTopnumber见原生声明及继承类型
expandIconHalfInnernumber见原生声明及继承类型
expandIconSizenumber见原生声明及继承类型
expandIconScalenumber见原生声明及继承类型
headerIconColorstring见原生声明及继承类型
headerIconHoverColorstring见原生声明及继承类型

声明来源: vendor/components/table/style/index.ts

import { unit } from '@ant-design/cssinjs';

import type { CSSObject } from '@ant-design/cssinjs';

import { FastColor } from '@ant-design/fast-color';

import { clearFix, resetComponent } from '../../style';

import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks, mergeToken } from '../../theme/internal';

import genBorderedStyle from './bordered';

import genEllipsisStyle from './ellipsis';

import genEmptyStyle from './empty';

import genExpandStyle from './expand';

import genFilterStyle from './filter';

import genFixedStyle from './fixed';

import genPaginationStyle from './pagination';

import genRadiusStyle from './radius';

import genRtlStyle from './rtl';

import genSelectionStyle from './selection';

import genSizeStyle from './size';

import genSorterStyle from './sorter';

import genStickyStyle from './sticky';

import genSummaryStyle from './summary';

import genVirtualStyle from './virtual';

export interface ComponentToken {
  /**
   * @desc 表头背景
   * @descEN Background of table header
   */
  headerBg: string;
  /**
   * @desc 表头文字颜色
   * @descEN Color of table header text
   */
  headerColor: string;
  /**
   * @desc 表头排序激活态背景色
   * @descEN Background color of table header when sorted
   */
  headerSortActiveBg: string;
  /**
   * @desc 表头排序激活态悬浮背景色
   * @descEN Background color of table header when sorted and hovered
   */
  headerSortHoverBg: string;
  /**
   * @desc 表格排序列背景色
   * @descEN Background color of table sorted column
   */
  bodySortBg: string;
  /**
   * @desc 表格行悬浮背景色
   * @descEN Background color of table hovered row
   */
  rowHoverBg: string;
  /**
   * @desc 表格行选中背景色
   * @descEN Background color of table selected row
   */
  rowSelectedBg: string;
  /**
   * @desc 表格行选中悬浮背景色
   * @descEN Background color of table selected row when hovered
   */
  rowSelectedHoverBg: string;
  /**
   * @desc 表格行展开背景色
   * @descEN Background color of table expanded row
   */
  rowExpandedBg: string;
  /**
   * @desc 单元格纵向内间距
   * @descEN Vertical padding of table cell
   */
  cellPaddingBlock: number;
  /**
   * @desc 单元格横向内间距(默认大尺寸)
   * @descEN Horizontal padding of table cell (large size by default)
   */
  cellPaddingInline: number;
  /**
   * @desc 单元格纵向内间距(中等尺寸)
   * @descEN Vertical padding of table cell (middle size)
   */
  cellPaddingBlockMD: number;
  /**
   * @desc 单元格横向内间距(中等尺寸)
   * @descEN Horizontal padding of table cell (middle size)
   */
  cellPaddingInlineMD: number;
  /**
   * @desc 单元格纵向内间距(小尺寸)
   * @descEN Vertical padding of table cell (small size)
   */
  cellPaddingBlockSM: number;
  /**
   * @desc 单元格横向内间距(小尺寸)
   * @descEN Horizontal padding of table cell (small size)
   */
  cellPaddingInlineSM: number;
  /**
   * @desc 表格边框/分割线颜色
   * @descEN Border color of table
   */
  borderColor: string;
  /**
   * @desc 表头圆角
   * @descEN Border radius of table header
   */
  headerBorderRadius: number;
  /**
   * @desc 表格底部背景色
   * @descEN Background of footer
   */
  footerBg: string;
  /**
   * @desc 表格底部文字颜色
   * @descEN Color of footer text
   */
  footerColor: string;
  /**
   * @desc 单元格文字大小(默认大尺寸)
   * @descEN Font size of table cell (large size by default)
   */
  cellFontSize: number;
  /**
   * @desc 单元格文字大小(中等尺寸)
   * @descEN Font size of table cell (middle size)
   */
  cellFontSizeMD: number;
  /**
   * @desc 单元格文字大小(小尺寸)
   * @descEN Font size of table cell (small size)
   */
  cellFontSizeSM: number;
  /**
   * @desc 表头分割线颜色
   * @descEN Split border color of table header
   */
  headerSplitColor: string;
  /**
   * @desc 固定表头排序激活态背景色
   * @descEN Background color of fixed table header when sorted
   */
  fixedHeaderSortActiveBg: string;
  /**
   * @desc 表头过滤按钮悬浮背景色
   * @descEN Background color of table header filter button when hovered
   */
  headerFilterHoverBg: string;
  /**
   * @desc 过滤下拉菜单选项背景
   * @descEN Background of filter dropdown menu item
   */
  filterDropdownMenuBg: string;
  /**
   * @desc 过滤下拉菜单颜色
   * @descEN Color of filter dropdown
   */
  filterDropdownBg: string;
  /**
   * @desc 展开按钮背景色
   * @descEN Background of expand button
   */
  expandIconBg: string;
  /**
   * @desc 选择列宽度
   * @descEN Width of selection column
   */
  selectionColumnWidth: number | string;
  /**
   * @desc Sticky 模式下滚动条背景色
   * @descEN Background of sticky scrollbar
   */
  stickyScrollBarBg: string;
  /**
   * @desc Sticky 模式下滚动条圆角
   * @descEN Border radius of sticky scrollbar
   */
  stickyScrollBarBorderRadius: number;

  /** @internal */
  expandIconMarginTop: number;
  /** @internal */
  expandIconHalfInner: number;
  /** @internal */
  expandIconSize: number;
  /** @internal */
  expandIconScale: number;
  /** @internal */
  headerIconColor: string;
  /** @internal */
  headerIconHoverColor: string;
}

export interface TableToken extends FullToken<'Table'> {
  tableFontSize: number;
  tableBg: string;
  tableRadius: number;
  tablePaddingHorizontal: number;
  tablePaddingVertical: number;
  tablePaddingHorizontalMiddle: number;
  tablePaddingVerticalMiddle: number;
  tablePaddingHorizontalSmall: number;
  tablePaddingVerticalSmall: number;
  tableBorderColor: string;
  tableHeaderTextColor: string;
  tableHeaderBg: string;
  tableFooterTextColor: string;
  tableFooterBg: string;
  tableHeaderCellSplitColor: string;
  tableHeaderSortBg: string;
  tableHeaderSortHoverBg: string;
  tableBodySortBg: string;
  tableFixedHeaderSortActiveBg: string;
  tableHeaderFilterActiveBg: string;
  tableFilterDropdownBg: string;
  tableFilterDropdownHeight: number | string;
  tableRowHoverBg: string;
  tableSelectedRowBg: string;
  tableSelectedRowHoverBg: string;

  tableFontSizeMiddle: number;
  tableFontSizeSmall: number;
  tableSelectionColumnWidth: number | string;
  tableExpandIconBg: string;
  tableExpandColumnWidth: number | string;
  tableExpandedRowBg: string;
  tableFilterDropdownWidth: number;
  tableFilterDropdownSearchWidth: number;

  // Z-Index
  zIndexTableFixed: number;

  // Virtual Scroll Bar
  tableScrollThumbSize: number;
  tableScrollThumbBg: string;
  tableScrollThumbBgHover: string;
  tableScrollBg: string;
}

注意

按照 React 的规范,所有的列表必须绑定 key。在 Table 中,dataSource 和 columns 里的数据值都需要指定 key 值。对于 dataSource 默认将每列数据的 key 属性作为唯一的标识。

控制台警告

如果 dataSource[i].key 没有提供,你应该使用 rowKey 来指定 dataSource 的主键,如下所示。若没有指定,控制台会出现以上的提示,表格组件也会出现各类奇怪的错误。

// 比如你的数据主键是 uid
return <Table rowKey="uid" />;
// 或
return <Table rowKey={(record) => record.uid} />;

FAQ

如何在没有数据或只有一页数据时隐藏分页栏

你可以设置 pagination 的 hideOnSinglePage 属性为 true。

表格过滤时会回到第一页?

前端过滤时通常条目总数会减少,从而导致总页数小于筛选前的当前页数,为了防止当前页面没有数据,我们默认会返回第一页。

如果你在使用远程分页,很可能需要保持当前页面,你可以参照这个 受控例子 控制当前页面不变。

表格分页为何会出现 size 切换器?

自 4.1.0 起,Pagination 在 total 大于 50 条时会默认显示 size 切换器以提升用户交互体验。如果你不需要该功能,可以通过设置 showSizeChanger 为 false 来关闭。

为什么 更新 state 会导致全表渲染?

由于 columns 支持 render 方法,因而 Table 无法知道哪些单元会受到影响。你可以通过 column.shouldCellUpdate 来控制单元格的渲染。

如何排查 Table 性能问题?

React DevTools 在分析复杂表格时可能带来额外开销,尤其是行列数量较多的场景。若你遇到明显卡顿,建议先关闭 React DevTools,或在干净的浏览器环境中重新测试。如果在正常运行环境下仍能稳定复现性能问题,欢迎提供最小复现以便我们继续排查。

固定列穿透到最上层该怎么办?

固定列通过 z-index 属性将其悬浮于非固定列之上,这使得有时候你会发现在 Table 上放置遮罩层时固定列会被透过的情况。为遮罩层设置更高的 z-index 覆盖住固定列即可。

如何自定义渲染可选列的勾选框(比如增加 Tooltip)?

自 4.1.0 起,可以通过 rowSelection 的 renderCell 属性控制,可以参考此处 Demo 实现展示 Tooltip 需求或其他自定义的需求。

为什么 components.body.wrapper 或 components.body.row 在 virtual 开启时会报错?

因为虚拟表格需要获取其 ref 做一些计算,所以你需要使用 React.forwardRef 包裹并传递 ref 到 dom。如以下代码:

const EditableRow = React.forwardRef<HTMLTableRowElement, EditableRowProps>(
  ({ index, ...props }, ref) => {
    const [form] = Form.useForm();
    return (
      <Form form={form} component={false}>
        <EditableContext.Provider value={form}>
          <tr {...props} ref={ref} />
        </EditableContext.Provider>
      </Form>
    );
  },
);

对于固定行高纵向滚动的场景,可以使用以下方法:

<Table
  //@ts-ignore // 这个属性未导出,但能透传给内部的虚拟滚动组件
  listItemHeight={36} // 帮助虚拟滚动正确计算高度,每行固定高度36px
/>

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/table/Column.ts
  • vendor/components/table/ColumnGroup.ts
  • vendor/components/table/ExpandIcon.tsx
  • vendor/components/table/InternalTable.tsx
  • vendor/components/table/hooks/useFilter/FilterDropdown.tsx
  • vendor/components/table/hooks/useFilter/FilterSearch.tsx
  • vendor/components/table/hooks/useFilter/FilterWrapper.tsx
  • vendor/components/table/hooks/useFilter/index.tsx
  • vendor/components/table/hooks/useLazyKVMap.ts
  • vendor/components/table/hooks/useSelection.tsx
  • vendor/components/table/hooks/useSorter.tsx
  • vendor/components/table/interface.ts
  • vendor/components/table/style/index.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。