要实现在每一条数据下新增一个空对象,可以在渲染表格数据时,将每条数据和空对象合并成一个新的数据数组。然后,通过遍历新的数据数组来渲染表格,并根据每条数据的特定字段来判断是否显示自定义行。

以下是一个示例代码,演示如何使用 antd 表格实现这个功能:

import React, { useState } from 'react';
import { Table, Input } from 'antd';

const data = [
  {
    id: 1,
    name: 'John',
    age: 30
  },
  {
    id: 2,
    name: 'Jane',
    age: 25
  }
];

const CustomRow = ({ editing, record }) => {
  const [name, setName] = useState(record.name);

  const handleInputChange = e => {
    setName(e.target.value);
  };

  return (
    <tr>
      <td>{record.id}</td>
      <td>
        {editing ? (
          <Input value={name} onChange={handleInputChange} />
        ) : (
          record.name
        )}
      </td>
      <td>{editing ? <button>Save</button> : <button>Edit</button>}</td>
    </tr>
  );
};

const App = () => {
  const [editingRow, setEditingRow] = useState(null);

  const handleEdit = record => {
    setEditingRow(record.id);
  };

  const columns = [
    {
      title: 'ID',
      dataIndex: 'id'
    },
    {
      title: 'Name',
      dataIndex: 'name',
      render: (text, record) => (
        <CustomRow editing={editingRow === record.id} record={record} />
      )
    },
    {
      title: 'Age',
      dataIndex: 'age'
    },
    {
      title: 'Action',
      render: (_, record) => (
        <button onClick={() => handleEdit(record)}>Edit</button>
      )
    }
  ];

  // 合并每条数据和空对象
  const mergedData = data.flatMap(item => [item, {}]);

  return <Table dataSource={mergedData} columns={columns} />;
};

export default App;

在上面的示例代码中,定义了一个 CustomRow 组件作为自定义行,根据 editing 属性决定显示输入框还是文本,通过 handleEdit 函数来切换编辑状态。在 columns 中使用 CustomRow 渲染自定义行,并根据 editingRow 的值决定是否显示输入框。

最后,在渲染表格时,将原始数据和空对象合并成一个新的数组 mergedData,再将 mergedData 作为表格的 dataSource。这样,每一条数据下都会有一个空对象,用于显示自定义行。


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

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