• 中文
  • ProTable - 高级表格

    ProTable 的诞生是为了解决项目中需要写很多 table 的样板代码的问题,所以在其中封装了很多常用的逻辑。这些封装可以简单的分类为预设行为与预设逻辑。

    依托于 ProForm 的能力,ProTable 的查询区可切换多种形态(如 QueryFilter / LightFilter),也可在 type="form" 等场景下更像普通表单使用。

    layout

    何时使用

    当你的表格需要与服务端进行交互或者需要多种单元格样式时,ProTable 是不二选择。

    Issue 回归场景

    ID名称
    暂无数据
    暂无数据
    状态读取与可编辑拖拽
    import type {
      ActionType,
      EditableFormInstance,
    } from '@ant-design/pro-components';
    import {
      EditableProTable,
      ProCard,
      ProTable,
    } from '@ant-design/pro-components';
    import { Alert, Button, Space, Tabs, Typography, message } from 'antd';
    import { useRef, useState } from 'react';
    
    type Row = {
      id: number;
      name: string;
      status?: 'active' | 'closed';
      sort?: number;
    };
    
    const rows: Row[] = [
      { id: 1, name: 'Alpha', status: 'active' },
      { id: 2, name: 'Beta', status: 'closed' },
      { id: 3, name: 'Gamma', status: 'active' },
    ];
    
    const CursorPagination = () => (
      <ProTable<Row>
        rowKey="id"
        search={false}
        options={false}
        columns={[
          { title: 'ID', dataIndex: 'id' },
          { title: '名称', dataIndex: 'name' },
        ]}
        pagination={{ type: 'cursor', pageSize: 1 }}
        request={async ({ nextToken }) => {
          const index = Number(nextToken ?? 0);
          return {
            success: true,
            data: rows.slice(index, index + 1),
            nextToken: index + 1 < rows.length ? String(index + 1) : undefined,
          };
        }}
      />
    );
    
    const SortFilterState = () => {
      const actionRef = useRef<ActionType>();
      const [snapshot, setSnapshot] = useState('点击按钮读取');
      return (
        <ProTable<Row>
          actionRef={actionRef}
          rowKey="id"
          search={false}
          pagination={false}
          dataSource={rows}
          columns={[
            { title: '名称', dataIndex: 'name', sorter: true },
            {
              title: '状态',
              dataIndex: 'status',
              filters: true,
              valueEnum: { active: '启用', closed: '关闭' },
            },
          ]}
          toolBarRender={() => [
            <Space key="state">
              <Button
                onClick={() =>
                  setSnapshot(
                    JSON.stringify(actionRef.current?.getSortFilter?.() ?? {}),
                  )
                }
              >
                读取排序和筛选
              </Button>
              <Typography.Text code>{snapshot}</Typography.Text>
            </Space>,
          ]}
        />
      );
    };
    
    const EditableDragSort = () => {
      const [dataSource, setDataSource] = useState<Row[]>(rows);
      return (
        <EditableProTable<Row>
          rowKey="id"
          value={dataSource}
          onChange={(value) => setDataSource([...value])}
          columns={[
            { title: '排序', dataIndex: 'sort', width: 64 },
            {
              title: '名称',
              dataIndex: 'name',
              formItemProps: {
                rules: [{ required: true, message: '请填写名称' }],
              },
              errorType: 'default',
            },
          ]}
          recordCreatorProps={false}
          dragSortKey="sort"
          editable={{ type: 'multiple', editableKeys: [1] }}
          onDragSortEnd={(_, __, nextDataSource) => {
            setDataSource(nextDataSource);
            message.success('顺序已更新,编辑行保持编辑状态');
          }}
        />
      );
    };
    
    const InlineValidation = () => {
      const editableFormRef = useRef<EditableFormInstance<Row>>();
      return (
        <Space direction="vertical" style={{ width: '100%' }}>
          <Button
            onClick={() => {
              editableFormRef.current?.validateFields().catch(() => undefined);
            }}
          >
            验证并显示行内错误
          </Button>
          <EditableProTable<Row>
            editableFormRef={editableFormRef}
            rowKey="id"
            value={[{ id: 1, name: '' }]}
            recordCreatorProps={false}
            columns={[
              {
                title: '名称',
                dataIndex: 'name',
                errorType: 'default',
                formItemProps: {
                  rules: [{ required: true, message: '请填写名称' }],
                },
              },
            ]}
            editable={{ type: 'multiple', editableKeys: [1] }}
          />
        </Space>
      );
    };
    
    export default () => (
      <ProCard direction="column" ghost gutter={[0, 16]}>
        <Alert
          type="info"
          showIcon
          message="表格稳定性与新增能力"
          description="覆盖游标分页、排序筛选状态、可编辑行拖拽和行内校验错误。"
        />
        <ProCard>
          <Tabs
            destroyOnHidden
            items={[
              {
                key: 'cursor',
                label: '游标分页 #9500',
                children: <CursorPagination />,
              },
              {
                key: 'state',
                label: '排序筛选 #9197',
                children: <SortFilterState />,
              },
              {
                key: 'drag',
                label: '编辑拖拽 #9046',
                children: <EditableDragSort />,
              },
              {
                key: 'error',
                label: '行内错误 #8786',
                children: <InlineValidation />,
              },
            ]}
          />
        </ProCard>
      </ProCard>
    );
    

    API

    ProTable 在 antd 的 Table 上进行了一层封装,支持了一些预设,并且封装了一些行为。这里只列出与 antd Table 不同的 API。

    request

    request 是 ProTable 最重要的 API,request 会接收一个对象。对象中必须要有 data 和 success,如果需要手动分页 total 也是必需的。request 会接管 loading 的设置,同时在查询表单查询时和 params 参数发生修改时重新执行。同时查询表单的值和 params 参数也会带入。以下是一个例子:

    <ProTable<DataType, Params>
      // params 是需要自带的参数
      // 这个参数优先级更高,会覆盖查询表单的参数
      params={params}
      request={async (
        // 第一个参数 params 查询表单和 params 参数的结合
        // 第一个参数中一定会有 pageSize 和  current ,这两个参数是 antd 的规范
        params: T & {
          pageSize: number;
          current: number;
        },
        sort,
        filter,
      ) => {
        // 这里需要返回一个 Promise,在返回之前你可以进行数据转化
        // 如果需要转化参数可以在这里进行修改
        const msg = await myQuery({
          page: params.current,
          pageSize: params.pageSize,
        });
        return {
          data: msg.result,
          // success 请返回 true,
          // 不然 table 会停止解析数据,即使有数据
          success: boolean,
          // 不传会使用 data 的长度,如果是分页一定要传
          total: number,
        };
      }}
    />

    列配置中也支持 request,但是只有几种 valueType 支持。

    ProTable

    属性描述类型默认值版本
    actionRefTable action 的引用,便于自定义触发React.Ref<ActionType | undefined>--
    beforeSearchSubmit搜索之前进行一些修改(params: Partial<U>) => any--
    cardBorderedTable 和 Search 外围 Card 组件的边框boolean | &#123;search?: boolean, table?: boolean&#125;false-
    cardPropstable 外面卡片的设置ProCardProps | false--
    columns列配置能力,支持一个数组ProColumns<T, ValueType>[]--
    columnEmptyText空值时的显示,不设置时显示 -,false 可以关闭此功能ProFieldEmptyText'-'-
    columnsState受控的列状态,可以操作显示隐藏ColumnStateType--
    dataSourceTable 的数据,ProTable 推荐使用 request 来加载T[]--
    dateFormatter转化 dayjs 格式数据为特定类型,false 不做转化'string' | 'number' | ((value: dayjs.Dayjs, valueType: string) => string | number) | false'string'-
    defaultData默认的数据T[]--
    defaultSize默认的 sizeSizeType--
    debounceTime防抖时间number20-
    editable可编辑表格的相关配置,支持 type="multiple" 等。配置详情RowEditableConfig<T>--
    ErrorBoundary自带了错误处理功能,防止白屏,ErrorBoundary=false 关闭默认错误边界React.ComponentClass<any, any> | false内置 ErrorBoundary-
    formtype="form" 和搜索表单的 Form 配置,ignoreRules: false 可开启查询表单校验,详见此处Omit<ProFormProps & QueryFilterProps, 'form'>--
    formRef可以获取到查询表单的 form 实例,用于一些灵活的配置TableFormItem<T>['formRef']--
    ghost幽灵模式,即是否取消表格区域的 paddingbooleanfalse-
    headerTitle左上角的 titleReactNode--
    manualRequest是否需要手动触发首次请求,配置为 true 时不可隐藏搜索表单booleanfalse-
    name可编辑表格的 name,通过这个 name 可以直接与 form 通信,无需嵌套NamePath--
    onDataSourceChangeTable 的数据发生改变时触发(dataSource: T[]) => void--
    onLoad数据加载完成后触发,会多次触发(dataSource: T[]) => void--
    onLoadingChangeloading 被修改时触发,一般是网络请求导致的(loading: boolean | SpinProps | undefined) => void--
    onRequestError数据加载失败时触发(error: Error) => void--
    onReset重置表单时触发() => void--
    onSizeChangetable 尺寸发生改变(size: DensitySize) => void--
    onSubmit提交表单时触发(params: U) => void--
    optionstable 工具栏,设为 false 时不显示,传入 function 会点击时触发{{ density?: boolean, fullScreen?: boolean | function, reload?: boolean | function, reloadIcon?: React.ReactNode, densityIcon?: React.ReactNode, setting?: boolean | SettingOptionType &#125;&#125;{ reload: true, density: true, setting: true, search: false, fullScreen: false }-
    optionsRender自定义渲染工具栏选项ToolBarProps<T>['optionsRender']--
    pagination分页器的配置,current 和 pageSize 会被 request 接管TablePaginationConfig | false--
    params用于 request 查询的额外参数,一旦变化会触发重新加载U--
    polling是否轮询,polling 表示轮询的时间间隔,0 表示关闭轮询,大于 0 表示开启轮询,最小的轮询时间为 2000msnumber | ((dataSource: T[]) => number) | undefined--
    postData对通过 request 获取的数据进行处理(data: T[]) => T[]--
    request获取 dataSource 的方法(params: U & {pageSize?: number, current?: number, keyword?: string}, sort: Record<string, SortOrder>, filter: Record<string, FilterValue>) => Promise<{data: T[], success?: boolean, total?: number}>--
    revalidateOnFocus窗口聚焦时自动重新请求booleanfalse-
    rowSelection选择项配置TableProps<T>['rowSelection'] & {alwaysShowAlert?: boolean} | false--
    search是否显示搜索表单,传入对象时为搜索表单的配置false | SearchConfig--
    searchFormRender渲染搜索表单(props: ProTableProps<T, U, ValueType>, defaultDom: JSX.Element) => ReactNode--
    style外层容器的样式React.CSSProperties--
    tableClassName封装的 table 的 classNamestring--
    tableExtraRendertable 和搜索表单之间的 dom 渲染(props: ProTableProps<T, U, ValueType>, dataSource: T[]) => ReactNode--
    tableRender自定义渲染表格函数(props: ProTableProps<T, U, ValueType>, defaultDom: ReactNode, domList: {toolbar: ReactNode, alert: ReactNode, table: ReactNode}) => ReactNode--
    tableStyle封装的 table 的 styleCSSProperties--
    tableViewRender渲染 table 视图,用于定制 ProList,不推荐直接使用;defaultDom 可为惰性函数,仅在需要默认 Table 时调用(见 resolveTableViewDefaultDom)(props: TableProps<DataSource>, defaultDom: JSX.Element | (() => JSX.Element)) => JSX.Element | undefined--
    toolBarRender渲染工具栏,支持返回一个 dom 数组,会自动增加 margin-rightToolBarProps<T>['toolBarRender'] | false--
    toolbar透传 ListToolBar 配置项ListToolBarProps--
    tooltip标题旁边的 tooltipstring | LabelTooltipType--
    typepro-table 类型ProSchemaComponentTypes--

    RecordCreator (EditableProTable)

    属性描述类型默认值版本
    (...buttonProps)antd 的 ButtonPropsButtonProps--
    position行增加在哪里,开始或者末尾'top' | 'bottom''bottom'-
    record需要新增的行数据,一般来说包含唯一 key,支持传入函数T | ((index: number, dataSource: T[]) => T){}-
    newRecordType新增行的类型,dataSource 直接写入数据,cache 写入缓存取消后消失'dataSource' | 'cache'--
    parentKey要增加到哪个节点下,一般用于多重嵌套表格React.Key | ((index: number, dataSource: T[]) => React.Key)--

    ColumnStateType

    属性描述类型默认值版本
    defaultValue列状态的默认值,只有初次生效,并用于重置使用Record<string, ColumnsState>--
    onChange列状态的值发生改变之后触发(value: Record<string, ColumnsState>) => void--
    persistenceKey持久化列的 key,用于判断是否是同一个 tablestring | number--
    persistenceType持久化列的类型,localStorage 设置在关闭浏览器后也是存在的,sessionStorage 关闭浏览器后会丢失'localStorage' | 'sessionStorage'--
    value列状态的值,支持受控模式Record<string, ColumnsState>--

    Search 搜索表单

    属性描述类型默认值版本
    className封装的搜索 Form 的 classNamestring--
    collapseRender收起按钮的 render(collapsed: boolean, showCollapseButton?: boolean) => ReactNode | false--
    collapsed是否收起boolean--
    defaultCollapsed默认是否收起booleantrue-
    defaultColsNumber默认一行显示几个表单项(查询表单分栏数)number--
    defaultFormItemsNumber默认展示几个表单项number--
    filterType过滤表单类型'query' | 'light''query'-
    labelWidth标签的宽度number | 'auto'80-
    layout搜索表单布局'horizontal' | 'inline' | 'vertical'--
    split每一行之前是否有分割线,layout 为 vertical 时生效boolean--
    onCollapse收起按钮的事件(collapsed: boolean) => void--
    optionRender自定义操作栏(searchConfig, formProps, dom) => ReactNode[] | false--
    resetText重置按钮的文本string'重置'-
    searchText查询按钮的文本string'查询'-
    searchGutter查询表单栅格间隔RowProps['gutter']--
    showHiddenNum是否显示收起之后显示隐藏个数booleanfalse-
    span配置查询表单的列数,支持按断点配置(xs/sm/md/lg/xl/xxl),未配置时按屏幕宽度自动分行number | SpanConfig响应式默认值-

    optionRender: false 只会隐藏操作按钮。如需在输入或选择后自动查询,可在 form.onValuesChange 中调用 formRef.current?.submit();请使用 ProTable 的 debounceTime 配置请求防抖。

    搜索表单的 rules 校验

    查询表单为了不阻塞搜索,默认忽略列配置 formItemProps.rules 中的校验规则(ProTable 会为查询表单自动注入 ignoreRules: true)。如果希望查询表单也执行校验,需要显式开启:

    <ProTable
      columns={columns}
      // 开启查询表单校验
      form={{ ignoreRules: false }}
    />

    开启后列上的 formItemProps.rules(如 required)会在提交查询时生效;校验不通过将阻止搜索请求。可编辑表格(editable)中的行内校验不受此配置影响。

    ColConfig

    const defaultSpanConfig = {
      xs: 24,
      sm: 24,
      md: 12,
      lg: 12,
      xl: 8,
      xxl: 6,
    };

    实际断点值来自 antd 设计 token(screenSMMin 等),可通过 ConfigProvider 主题定制;以上为默认 token 下的参考值。

    菜单栏 options 配置

    export type OptionsType =
      | ((e: React.MouseEvent<HTMLSpanElement>, action?: ActionType) => void)
      | boolean;
    
    export type OptionConfig = {
      density?: boolean;
      fullScreen?: OptionsType;
      reload?: OptionsType;
      setting?: boolean | SettingOptionType;
      search?: (OptionSearchProps & { name?: string }) | boolean;
      reloadIcon?: React.ReactNode;
      densityIcon?: React.ReactNode;
    };
    
    export type SettingOptionType = {
      draggable?: boolean;
      checkable?: boolean;
      showListItemOption?: boolean;
      checkedReset?: boolean;
      listsHeight?: number;
      extra?: React.ReactNode;
      children?: React.ReactNode;
      settingIcon?: React.ReactNode;
      /** #9620: 自定义列设置面板列表项标题渲染,可取消固定宽度实现单行自适应 */
      listItemTitleRender?: (
        title: React.ReactNode,
        column: { key?: React.Key; title?: React.ReactNode; [key: string]: any },
      ) => React.ReactNode;
    };

    ActionRef 手动触发

    有时我们要手动触发 table 的 reload 等操作,可以使用 actionRef。

    方法描述类型
    reload刷新表格,如果传入 true 则重置页码(resetPageIndex?: boolean) => Promise<void>
    reloadAndRest刷新并清空,页码也会重置,不包括表单() => Promise<void>
    reset重置到默认值,包括表单() => void
    clearSelected清空选中项() => void
    startEditable开始编辑行(rowKey: Key) => boolean
    cancelEditable取消编辑行(rowKey: Key) => boolean
    scrollTo滚动到指定位置(arg: number | &#123; index?: number; key?: Key; top?: number &#125;) => void
    fullScreen切换全屏() => void
    setPageInfo设置分页信息(page: Partial<PageInfo>) => void
    // 示例
    const ref = useRef<ActionType>();
    
    <ProTable actionRef={ref} />;
    
    // 刷新
    ref.current?.reload();
    
    // 刷新并清空,页码也会重置,不包括表单
    ref.current?.reloadAndRest();
    
    // 重置到默认值,包括表单
    ref.current?.reset();
    
    // 清空选中项
    ref.current?.clearSelected();
    
    // 开始编辑
    ref.current?.startEditable(rowKey);
    
    // 结束编辑
    ref.current?.cancelEditable(rowKey);

    Columns 列定义

    请求远程数据比较复杂,详细可以看这里。

    💡 本地排序/筛选与 request 当你提供了 request 时,ProTable 默认会在筛选/排序变化后触发一次重新请求,并把服务端需要的 sort / filter 透传给 request(params, sort, filter)。

    如果你希望前端本地排序/筛选(不触发 request),请使用以下写法:

    • 本地筛选:同时配置 filters + onFilter(函数或 true)。
    • 本地排序:将 sorter 设为比较函数,或 { compare }。不要使用 sorter: true(这代表服务端排序)。

    排序后 Ant Design 会为当前方向添加 .ant-table-column-sorter-up.active 或 .ant-table-column-sorter-down.active,并在表头设置 aria-sort。如排序正常但颜色不变,请优先检查业务全局 CSS 是否覆盖 .active,以及 ConfigProvider 的主题 token。 :::

    属性描述类型默认值
    title与 antd 中基本相同,但是支持通过传入一个方法ReactNode | ((config: ProColumnType<T>, type: ProTableTypes) => ReactNode)-
    tooltip会在 title 之后展示一个 icon,hover 之后提示一些信息LabelTooltipType | string-
    ellipsis是否自动缩略。true 时使用 antd Table 原生 CSS 省略(性能更优,无悬浮提示);需要 tooltip 提示或自定义时传 {showTitle?: boolean,tooltip: [TooltipProps](https://ant-design.antgroup.com/components/tooltip-cn#api)} 走 Typography 渲染boolean | {showTitle?: boolean,tooltip: TooltipProps}-
    copyable是否支持复制boolean-
    valueEnum值的枚举,会自动转化把值当成 key 来取出要显示的内容valueEnum-
    valueType值的类型,会生成不同的渲染器valueTypetext
    order查询表单中的权重,权重大排序靠前number-
    fieldProps查询表单的 props,会透传给表单项,如果渲染出来是 Input,就支持 Input 的所有 props,同理如果是 select,也支持 select 的所有 props。也支持方法传入(form,config)=>Record | Record-
    formItemProps传递给 Form.Item 的配置,可以配置 rules,但查询表单默认忽略 rules,需配置 form={{ ignoreRules: false }}(form,config)=>formItemProps | formItemProps-
    renderText类似 table 的 render,但是必须返回 string,如果只是希望转化枚举,可以使用 valueEnum(text: any,record: T,index: number,action: UseFetchDataAction<T>) => string-
    render类似 table 的 render,第一个参数变成了 dom,增加了第四个参数 action(text: ReactNode,record: T,index: number,action: UseFetchDataAction<T>) => ReactNode | ReactNode[]-
    formItemRender渲染查询表单的输入组件(item,{ type, defaultRender, formItemProps, fieldProps, ...rest },form,action) => ReactNode-
    search配置列的搜索相关,false 为隐藏boolean | { transform: (value: any) => any }true
    sorter与 antd 中基本相同,新增支持字串覆盖该栏位请求时字段function | boolean | string | &#123; compare: function, multiple: number &#125;-
    search.transform转化值的 key, 一般用于时间区间的转化(value: any) => any-
    editable在编辑表格中是否可编辑的,函数的参数和 table 的 render 一样boolean | (text: any, record: T,index: number) => boolean-
    colSize一个表单项占用的格子数量,占比= colSize*span,colSize 默认为 1 ,span 为 8,span是form={{span:8}} 全局设置的number-
    hideInTable在 Table 中不展示此列boolean-
    hideInForm在 Form 中不展示此列boolean-
    hideInDescriptions在 Descriptions 中不展示此列boolean-
    hideInSetting不在配置工具中显示boolean-
    filters表头的筛选菜单项,当值为 true 时,自动使用 valueEnum 生成boolean | object[]false
    onFilter筛选表单,为 true 时使用 ProTable 自带的,为 false 时关闭本地筛选(value, record) => boolean | falsefalse
    onCell与 antd Table 相同,设置单元格属性,返回 colSpan / rowSpan 可实现合并单元格(值为 0 时不渲染该单元格),写法与 antd 合并单元格示例 完全一致(record: T, index?: number) => React.TdHTMLAttributes<HTMLTableCellElement>-
    request从服务器请求枚举request-
    initialValue查询表单项初始值any-
    disable列设置中disabled的状态boolean | { checkbox: boolean; }-
    readonly只读boolean-
    listSlot列表键(ProList 插槽),指定该列映射到列表项的插槽位置,如 title、avatar、description、subTitle、content、actions、aside、type,私有属性string-

    合并单元格示例

    onCell 返回 colSpan / rowSpan 即可合并单元格,与 antd Table 完全一致(被合并的单元格返回 0):

    姓名年龄地址标签
    胡彦祖42西湖区湖底公园 1 号前端 / 资深
    李大钊前端 / 资深
    王五32后端
    import type { ProColumns } from '@ant-design/pro-components';
    import { ProTable } from '@ant-design/pro-components';
    import React from 'react';
    
    interface TableColumn {
      key: React.Key;
      name: string;
      age: number;
      address: string;
      tags: string[];
    }
    
    const dataSource: TableColumn[] = [
      {
        key: '1',
        name: '胡彦祖',
        age: 42,
        address: '西湖区湖底公园 1 号',
        tags: ['前端', '资深'],
      },
      {
        key: '2',
        name: '李大钊',
        age: 32,
        address: '西湖区湖底公园 1 号',
        tags: ['前端', '资深'],
      },
      {
        key: '3',
        name: '王五',
        age: 32,
        address: '西湖区湖底公园 2 号',
        tags: ['后端'],
      },
    ];
    
    const columns: ProColumns<TableColumn>[] = [
      {
        title: '姓名',
        dataIndex: 'name',
        key: 'name',
      },
      {
        title: '年龄',
        dataIndex: 'age',
        key: 'age',
        // 合并单元格:返回 colSpan/rowSpan,为 0 时该单元格不渲染
        onCell: (_, index = 0) => {
          // 第一行年龄向下合并一格
          if (index === 0) return { rowSpan: 2 };
          if (index === 1) return { rowSpan: 0 };
          return {};
        },
      },
      {
        title: '地址',
        dataIndex: 'address',
        key: 'address',
        onCell: (_, index = 0) => {
          // 地址列整体合并为一列
          if (index === 0) return { rowSpan: 3 };
          return { rowSpan: 0 };
        },
      },
      {
        title: '标签',
        dataIndex: 'tags',
        key: 'tags',
        render: (_, record) => record.tags.join(' / '),
      },
    ];
    
    export default () => (
      <ProTable<TableColumn>
        columns={columns}
        dataSource={dataSource}
        rowKey="key"
        search={false}
        options={false}
        pagination={false}
      />
    );
    

    valueType 值类型

    ProTable 封装了一些常用的值类型来减少重复的 render 操作,配置一个 valueType 即可展示格式化响应的数据。

    批量操作

    与 antd 相同,批量操作需要设置 rowSelection 来开启,与 antd 不同的是,pro-table 提供了一个 alert 用于承载一些信息。你可以通过 tableAlertRender和 tableAlertOptionRender 来对它进行自定义。设置或者返回 false 即可关闭。

    属性描述类型默认值版本
    alwaysShowAlert总是展示 alert,默认无选择不展示(rowSelection 内置属性)boolean--
    tableAlertOptionRender自定义批量操作工具栏右侧选项区域,false 时不显示({ selectedRowKeys: Key[], selectedRows: T[], onCleanSelected: () => void }) => ReactNode | false--
    tableAlertRender自定义批量操作工具栏左侧信息区域,false 时不显示({ selectedRowKeys: Key[], selectedRows: T[], onCleanSelected: () => void }) => ReactNode | false--

    搜索表单

    ProTable 会根据列来生成一个 Form,用于筛选列表数据,最后的值会根据通过 request 的第一个参数返回,看起来就像。

    <ProTable request={(params,sort,filter)=>{all params}}>

    按照规范,table 的表单不需要任何的必选参数,所有点击搜索和重置都会触发 request 来发起一次查询。

    Form 的列是根据 valueType 来生成不同的类型,详细的值类型请查看通用配置。

    valueType 为 index, indexBorder, option 或者没有 dataIndex 和 key 的列将会被忽略。

    列表工具栏

    用于自定义表格的工具栏部分。

    ListToolBarProps

    列表和表格的工具栏配置属性

    参数说明类型默认值版本
    actions操作区ReactNode[]--
    filter过滤区,通常配合 LightFilter 使用ReactNode--
    menu菜单配置ListToolBarMenu--
    multipleLine是否多行展示booleanfalse-
    search查询区,支持传入 Input.Search 配置或自定义节点,false 时隐藏SearchProps & {onSearch} | ReactNode | boolean--
    onSearch查询区搜索触发(keyWords: string) => void--
    settings设置区(ReactNode | Setting)[]--
    subTitle子标题ReactNode--
    tabs标签页配置,仅当 multipleLine 为 true 时有效ListToolBarTabs--
    title标题ReactNode--
    tooltiptooltip 描述string | LabelTooltipType--

    SearchProps 为 antd 的 Input.Search 的属性。

    Setting

    参数说明类型默认值版本
    icon图标ReactNode--
    key操作唯一标识string--
    onClick设置被触发(key: string) => void--
    tooltiptooltip 描述LabelTooltipType | string--

    ListToolBarMenu

    参数说明类型默认值版本
    activeKey当前值React.Key--
    items菜单项{ key: React.Key; label: ReactNode; disabled?: boolean }[]--
    onChange切换菜单的回调(activeKey: React.Key) => void--
    type类型'inline' | 'dropdown' | 'tab''inline'-

    ListToolBarTabs

    参数说明类型默认值版本
    activeKey当前选中项string--
    items菜单项TabPaneProps & { key?: string }[]--
    onChange切换菜单的回调(activeKey: string) => void--

    TableDropdown

    参数说明类型默认值版本
    menus菜单配置{ key: string; name: ReactNode; disabled?: boolean }[]--
    onSelect选中菜单的回调(key: string) => void--