当前位置:首页 > React

react antd表格中如何进行编辑

2026-01-26 07:19:22React

使用 FormTable 结合实现编辑

Tablecolumns 中,通过 render 方法动态切换显示和编辑状态。编辑状态时,使用 Form.Item 包裹输入组件(如 InputSelect),并通过 form.setFieldsValueform.getFieldsValue 管理数据。

react antd表格中如何进行编辑

import { Table, Input, Button, Form } from 'antd';

const EditableTable = () => {
  const [form] = Form.useForm();
  const [editingKey, setEditingKey] = useState('');
  const [data, setData] = useState(initialData);

  const isEditing = (record) => record.key === editingKey;

  const edit = (record) => {
    form.setFieldsValue({ ...record });
    setEditingKey(record.key);
  };

  const save = async (key) => {
    try {
      const values = await form.validateFields();
      const newData = [...data];
      const index = newData.findIndex((item) => key === item.key);
      newData[index] = { ...newData[index], ...values };
      setData(newData);
      setEditingKey('');
    } catch (err) {
      console.error('Validate Failed:', err);
    }
  };

  const columns = [
    {
      title: 'Name',
      dataIndex: 'name',
      render: (_, record) => {
        if (isEditing(record)) {
          return (
            <Form.Item name="name" rules={[{ required: true }]}>
              <Input />
            </Form.Item>
          );
        }
        return record.name;
      },
    },
    {
      title: 'Action',
      render: (_, record) => {
        if (isEditing(record)) {
          return (
            <Button onClick={() => save(record.key)} type="primary">
              Save
            </Button>
          );
        }
        return <Button onClick={() => edit(record)}>Edit</Button>;
      },
    },
  ];

  return (
    <Form form={form} component={false}>
      <Table columns={columns} dataSource={data} />
    </Form>
  );
};

使用 editable 属性实现行内编辑

通过 Tablecomponents 属性自定义单元格为可编辑状态。结合 onCell 方法动态控制编辑行为,适用于行内直接修改的场景。

react antd表格中如何进行编辑

import { Table, Input } from 'antd';

const EditableCell = ({ editing, dataIndex, children, ...restProps }) => {
  return (
    <td {...restProps}>
      {editing ? (
        <Input defaultValue={children[1]} />
      ) : (
        children
      )}
    </td>
  );
};

const EditableTable = () => {
  const [editingKey, setEditingKey] = useState('');

  const columns = [
    {
      title: 'Name',
      dataIndex: 'name',
      onCell: (record) => ({
        editing: record.key === editingKey,
        dataIndex: 'name',
      }),
    },
    {
      title: 'Action',
      render: (_, record) => (
        <Button onClick={() => setEditingKey(record.key)}>
          Edit
        </Button>
      ),
    },
  ];

  return (
    <Table
      components={{ body: { cell: EditableCell } }}
      columns={columns}
      dataSource={data}
    />
  );
};

使用 pro-table 快速实现编辑

若项目中使用 @ant-design/pro-table,可直接通过 editable 属性配置表格编辑功能,无需手动管理状态。

import ProTable from '@ant-design/pro-table';

const EditableTable = () => {
  return (
    <ProTable
      columns={[
        { title: 'Name', dataIndex: 'name', editable: true },
        { title: 'Age', dataIndex: 'age', editable: true },
      ]}
      value={data}
      editable={{
        onSave: async (key, row) => {
          console.log(key, row);
        },
      }}
    />
  );
};

注意事项

  • 表单验证:通过 Form.Itemrules 属性定义校验规则,确保数据合法性。
  • 性能优化:大数据量时,避免频繁渲染,可通过 shouldUpdatememo 优化组件。
  • 数据同步:编辑后需手动更新数据源,避免直接修改原始数据。

标签: 表格编辑
分享给朋友:

相关文章

vue实现表格修改

vue实现表格修改

Vue 实现表格修改的方法 使用 v-model 绑定数据 在 Vue 中可以通过 v-model 实现双向数据绑定,适用于表格单元格的编辑。 为表格的每个单元格绑定 v-model,动态修改数据。…

vue双击实现编辑

vue双击实现编辑

实现双击编辑功能的步骤 在Vue中实现双击编辑功能,可以通过监听双击事件并切换显示状态来完成。以下是一个完整的实现方法: 监听双击事件 使用@dblclick指令监听元素的双击事件,触发编辑模式:…

vue实现条纹表格

vue实现条纹表格

实现条纹表格的基本方法 在Vue中实现条纹表格可以通过CSS的:nth-child选择器或结合Vue的动态类绑定来完成。以下是两种常见实现方式: 使用纯CSS实现 <template>…

vue 实现表格分页

vue 实现表格分页

Vue 实现表格分页的方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,结合 el-table 可以快速实现表格分页功能。 安装…

vue 实现excel表格

vue 实现excel表格

Vue 实现 Excel 表格功能 在 Vue 中实现 Excel 表格功能可以通过多种方式完成,包括使用第三方库或手动实现基础功能。以下是几种常见方法: 使用 xlsx 库处理 Excel 数据…

Vue在线表格实现

Vue在线表格实现

Vue在线表格实现方案 使用Element UI的el-table组件 Element UI提供了功能强大的表格组件el-table,支持排序、筛选、分页等常见功能。安装Element UI后可直接使…