你可以使用 Ant Design 的 Table 组件和自定义行来实现这个需求。下面是一个示例代码:

首先,你需要在你的 React 组件中导入需要的组件和样式:

import React, { useState } from 'react';
import { Table, Input, Button } from 'antd';
import 'antd/dist/antd.css';

然后,你可以定义一个表格的数据和自定义行的组件:

const data = [
  { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park' },
  { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park' },
  { key: '3', name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park' },
  { key: '4', name: 'Jim Red', age: 32, address: 'London No. 2 Lake Park' }
];

const EditableRow = ({ index, ...props }) => {
  const [edit, setEdit] = useState(false);
  const [rowData, setRowData] = useState(props.rowData); // 自定行的数据

  const handleEdit = () => {
    setEdit(true);
  };

  const handleSave = () => {
    setEdit(false);
    // 保存修改后的数据
    props.saveRowData(index, rowData);
  };

  const handleChange = (e) => {
    // 更新自定行的数据
    setRowData({ ...rowData, [e.target.name]: e.target.value });
  };

  return (
    <tr {...props}>
      {edit ? (
        // 编辑状态下显示输入框
        <>
          <td>
            <Input
              name='name'
              value={rowData.name}
              onChange={handleChange}
            />
          </td>
          <td>
            <Input
              name='age'
              value={rowData.age}
              onChange={handleChange}
            />
          </td>
          <td>
            <Input
              name='address'
              value={rowData.address}
              onChange={handleChange}
            />
          </td>
          <td>
            <Button onClick={handleSave}>保存</Button>
          </td>
        </>
      ) : (
        // 非编辑状态下显示数据
        <>
          <td>{props.name}</td>
          <td>{props.age}</td>
          <td>{props.address}</td>
          <td>
            <Button onClick={handleEdit}>编辑</Button>
          </td>
        </>
      )}
    </tr>
  );
};

接下来,你可以在你的 React 组件中使用 Table 组件,并将自定义行作为 components 属性传递给 Table 组件:

const App = () => {
  const [tableData, setTableData] = useState(data);

  const saveRowData = (index, rowData) => {
    const newData = [...tableData];
    newData[index] = rowData;
    setTableData(newData);
  };

  const columns = [
    { title: 'Name', dataIndex: 'name', key: 'name' },
    { title: 'Age', dataIndex: 'age', key: 'age' },
    { title: 'Address', dataIndex: 'address', key: 'address' }
  ];

  const components = {
    body: {
      row: EditableRow
    }
  };

  const tableColumns = columns.map((column) => ({
    ...column,
    ellipsis: true // 文本过长时自动省略
  }));

  return (
    <Table
      dataSource={tableData}
      columns={tableColumns}
      components={components}
      rowKey='key'
      saveRowData={saveRowData}
    />
  );
};

export default App;

在这个示例中,我们将 data 作为表格的数据,使用 useState 来管理表格数据的状态。同时,我们定义了一个 saveRowData 函数,用于保存修改后的自定行数据,并更新表格的数据状态。

在 EditableRow 组件中,我们使用 useState 来管理自定行的编辑状态和数据,并根据编辑状态来显示不同的内容。当点击编辑按钮时,编辑状态变为 true,输入框显示自定行的数据。当点击保存按钮时,编辑状态变为 false,保存修改后的数据。

最后,我们在 App 组件中使用 Table 组件,并传递了自定义的 components 和 saveRowData 函数作为属性。这样,当点击编辑按钮时,自定行会变成输入框,点击保存按钮时,会保存修改后的数据。

希望这个示例对你有帮助!


原文地址: http://www.cveoy.top/t/topic/o2TQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录