You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material Table重写添加行功能:如何在可编辑添加行UI打开前执行函数

实现方案

你可以通过自定义添加操作按钮的方式,在触发打开添加行UI之前插入你的自定义逻辑,具体实现如下:

步骤1:声明Material Table实例引用

在你的组件内先创建ref,用于调用表格内置的添加行方法:

import { useRef } from 'react';

const tableRef = useRef();

步骤2:调整Material Table配置

替换默认的添加行按钮,自定义点击逻辑,完整代码示例:

<MaterialTable
  ref={tableRef}
  title="Timesheet"
  columns={columns}
  data={DataArray}
  icons={tableIcons}
  // 自定义全局操作,替换默认添加按钮
  actions={[
    {
      icon: tableIcons.Add,
      tooltip: '添加行',
      isFreeAction: true,
      onClick: (event) => {
        // 此处先执行你的自定义逻辑
        console.log('Hello');
        // 自定义逻辑执行完成后,调用内置方法打开添加行UI
        tableRef.current.dataManager.addRow();
      }
    }
  ]}
  editable={{
    onRowAddCancelled: rowData => console.log('Row adding cancelled'),
    onRowUpdateCancelled: rowData => console.log('Row editing cancelled'),
    onRowAdd: newData =>
      new Promise((resolve, reject) => {
        setTimeout(() => {
          // 保留你原有添加行的业务逻辑
          resolve();
        }, 1000);
      }),    
  }}
  options={{
    actionsColumnIndex: -1,
    addRowPosition: "first",
    search:false,
    exportButton: true,
    // 关闭默认的添加按钮,避免出现重复按钮
    editable: {
      addRow: false
    }
  }}
/>

异步逻辑适配

如果你的自定义逻辑是异步操作(比如接口请求、前置校验),调整点击事件为异步写法即可:

onClick: async (event) => {
  // 执行异步自定义逻辑
  await yourCustomAsyncFunction();
  // 逻辑完成后再打开添加行UI
  tableRef.current.dataManager.addRow();
}

内容的提问来源于stack exchange,提问作者user16985442

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:15:05