A React table component designed to display large data with high performance.
- 🚀 高性能: 数据量较大时可以开启虚拟滚动
- 🎨 定制: 简单灵活的 API,丰富的定制能力
- 💎 实用表格特性: 支持排序、搜索、分页、固定表头、左侧/右侧锁列、自定义操作等复杂功能
online example: https://haianweifeng.github.io/react-customize-data-table
npm i react-customize-data-table
Install dependencies,
$ npm iStart the dev server,
$ npm startBuild documentation,
$ npm run docs:buildRun test,
$ npm testBuild library via father,
$ npm run compileimport Table from 'react-customize-data-table';
ReactDOM.render(<Table />, container);| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| className | 表格的样式类名 | string | - |
| style | 表格的行内样式 | React.CSSProperties | - |
| dataSource | 表格展示的数据源 | object[] | - |
| columns | 表格列的配置 | ColumnsType<T> |
- |
| rowKey | 表格行 key 默认取值 key | string | ((row: T) => string | number) | key |
| striped | 是否显示交错斑马底纹 | boolean | false |
| bordered | 是否展示外边框和列边框 | boolean | false |
| loading | 页面是否加载中 | boolean | React.ReactNode |
false |
| showHeader | 是否显示表头 | boolean | true |
| size | 表格大小 | default | small | large |
default |
| rowClassName | 表格行的类名 | (record: T, index: number) => string | - |
| rowStyle | 表格行的 style | ((record: T, index: number) => React.CSSProperties) | React.CSSProperties | - |
| cellClassName | 表体单元格的类名 | ((column: ColumnType<T>, rowIndex: number, colIndex: number) => string) | string |
- |
| cellStyle | 表体单元格的 style | ((column: ColumnType<T>, rowIndex: number, colIndex: number) => React.CSSProperties) | React.CSSProperties |
- |
| headerCellClassName | 表头单元格的类名 | ((column: ColumnType<T> | ColumnGroupType<T>, rowIndex: number, colIndex: number) => string) | string |
- |
| headerCellStyle | 表头单元格的 style | ((column: ColumnType<T> | ColumnGroupType<T>, rowIndex: number, colIndex: number) => React.CSSProperties) | React.CSSProperties |
- |
| headerRowClassName | 表头行的类名 | ((rowIndex: number) => string) | string | - |
| headerRowStyle | 表头行的 style | ((rowIndex: number) => React.CSSProperties) | React.CSSProperties | - |
| onHeaderRowEvents | 设置表头行事件 | (rowIndex: number) => object | - |
| onHeaderCellEvents | 设置表头行单元格事件 | (column: ColumnType<T> | ColumnGroupType<T>, rowIndex: number) => object |
- |
| onRowEvents | 设置表体行事件 | (record: T, rowIndex: number) => object | - |
| onCellEvents | 设置表体单元格事件 | (record: T, rowIndex: number) => object | - |
| pagination | 分页 | PaginationProps | - |
| empty | 空数据文案 | string | React.ReactNode | - |
| locale | 默认文案设置 | LocalType | - |
| rowHeight | 单行表格的预期高度 | number | - |
| renderMaxRows | 单次 render 的最大行数 | number | - |
| width | 表格宽度 | number | - |
| height | 表格高度,默认为自动高度,如果表格内容大于此值,会固定表头 | number | - |
| virtualized | 是否开启虚拟列表 | boolean | - |
| onScroll | 监听滚动回调函数 | (x: number, y: number) => void | - |
| onColumnResize | 列宽伸缩后的回调 | (newWidth: number, oldWidth: number, column: ColumnType<T>, event: Event) => void |
- |
| rowSelection | 表格行是否可选择, 配置项 | object | - |
| onSort | 排序事件 | (sortResult: { column: ColumnType<T>, order: asc | desc | null, field: string | undefined }) => void |
- |
| onFilter | 筛选事件 | (filterInfo: Record<React.Key, React.Key[]>) => void | - |
| expandable | 配置展开属性, 配置项 | object | - |
| treeProps | 配置树形数据属性, 配置项 | object | - |
| summary | 渲染底部信息 | { render: () => React.ReactNode; colSpan?: number; rowSpan?: number }[][] | - |
列描述数据对象,是 columns 中的一项,Column 使用相同的 API。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| type | 设置列的类型 | expand | checkbox | radio | default |
default |
| align | 设置列的对齐方式 | left | center | right |
left |
| className | 列样式类名 | string | - |
| dataIndex | 列对应字段名 | string | - |
| key | React 需要的 key,如果已经设置了唯一的 dataIndex,可以忽略这个属性 | string | - |
| fixed | 列固定 如果相邻的多列需要锁定,只需指定最外侧的 column 即可,需要配合横向滚动才生效 | left | right |
- |
| render | 生成复杂数据的渲染函数 | (text: any, record: T, index: number) => React.ReactNode | - |
| title | 列头显示文字 | React.ReactNode | - |
| width | 列宽度 | number | string | - |
| maxWidth | 最大列宽 | number | string | - |
| minWidth | 最小列宽 | number | string | - |
| ellipsis | 超过宽度将自动省略 | boolean | { tooltip: boolean; tooltipTheme?: dark | light; renderTooltip?: (trigger: React.ReactNode, tip: React.ReactNode) => React.ReactNode;} |
- |
| colSpan | 表头列合并, 设置为 0 时,不渲染 | number | - |
| resizable | 是否允许拖拽调整宽度 需开启 border 属性,对于多级表头只支持最后一级表头拖拽调整宽度 | boolean | - |
| onCell | 设置单元格属性 | (record: T, rowIndex: number) => { colSpan?: number; rowSpan?: number } | - |
| defaultSortOrder | 默认排序 | asc | desc |
- |
| sortOrder | 排序的受控属性,外界可用此控制列的排序 | asc | desc | null |
- |
| sorter | 排序函数 | ((rowA: T, rowB: T) => number) | { compare: (rowA: T, rowB: T) => number; weight: number; } | - |
| renderSorter | 自定义排序图标 | (params: { activeAsc: boolean; activeDesc: boolean; triggerAsc: (event: React.MouseEvent) => void; triggerDesc: (event: React.MouseEvent) => void; }) => React.ReactNode | - |
| defaultFilteredValue | 默认筛选值 | React.Key[] | - |
| filteredValue | 筛选的受控属性 | React.Key[] | - |
| filterMultiple | 筛选是否多选 | boolean | - |
| filterIcon | 自定义 filter 图标 | (filtered: boolean) => React.ReactNode | - |
| filterSearch | 筛选菜单项是否可搜索 | ((value: string, record: FilterMenus) => boolean) | boolean | - |
| filters | 表头的筛选菜单项 | { label: string; value: string }[] | - |
| filterMethod | 筛选函数 | (value: React.Key, record: T) => boolean | - |
参照列的配置,但是忽略dataIndex和type 属性,增加children属性, children 就是列配置属性的集合。
展开功能的配置。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| columnTitle | 自定义展开列表头 | React.ReactNode | - |
| columnWidth | 自定义展开列宽度 | string | number | - |
| expandedRowRender | 渲染展开行的内容 | (record: T, index: number, expanded: boolean) => React.ReactNode | - |
| expandedRowClassName | 展开行的 className | (record: T, index: number) => string | - |
| rowExpandable | 设置是否允许行展开 | (record: T) => boolean | - |
| defaultExpandAllRows | 初始时,是否展开所有行 | boolean | false |
| defaultExpandedRowKeys | 默认展开的行 | string[] | number[] | - |
| expandedRowKeys | 展开的行,控制属性 | string[] | number[] | - |
| expandIcon | 自定义展开图标 | (record: T, expanded: boolean, onExpand?: (expanded: boolean, record: T) => void) => React.ReactNode | - |
| onExpand | 点击展开图标时触发 | (expanded: boolean, record: T) => void | - |
树形功能的配置。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| indentSize | 树形数据每层的缩进 | number | 15 |
| treeColumnsName | 展开图标所在列名 | string | - |
| defaultExpandAllRows | 初始时,是否展开所有行 | boolean | false |
| defaultExpandedRowKeys | 默认展开的行 | string[] | number[] | - |
| expandedRowKeys | 展开的行,控制属性 | string[] | number[] | - |
| expandIcon | 自定义展开图标 | (record: T, expanded: boolean, onExpand?: (expanded: boolean, record: T) => void) => React.ReactNode | - |
| onExpand | 点击展开图标时触发 | (expanded: boolean, record: T) => void | - |
选择功能的配置。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| columnTitle | 自定义列表选择框标题 | React.ReactNode | - |
| columnWidth | 自定义列表选择框宽度 | string | number | 44px |
| getCheckboxProps | 选择框的默认属性配置 | (record: T) => any | - |
| renderCell | 渲染表体的勾选框 | (checked: boolean, record: T, index: number, originNode: React.ReactNode) => React.ReactNode | - |
| selectedRowKeys | 指定选中项的 key 数组,需要和 onChange 进行配合 | string[] | number[] | - |
| defaultSelectedRowKeys | 默认选中项的 key 数组 | string[] | number[] | - |
| type | 多选/单选 | checkbox | radio |
checkbox |
| onChange | 选中项发生变化时的回调 | (selectedRowKeys: (string | number)[], selectedRows: T[]) => void | - |
| onSelect | 用户手动选择/取消选择某行的回调 | (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void | - |
| onSelectAll | 用户手动选择/取消选择所有行的回调 | (selected: boolean, selectedRows: T[], changeRows: T[]) => void | - |
文案设置。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| filterSearchPlaceholder | 筛选搜索框提示语 | string | '在筛选项中搜索' |
| filterEmptyText | 无筛选菜单时提示文案 | string | '无筛选项' |
| filterResult | 过滤搜索结果 | string | '未发现' |
| filterConfirm | 过滤确定按钮 | string | '筛选' |
| filterReset | 过滤重置按钮 | string | '重置' |