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

如何在ReactJS开发的表格中添加编辑功能(已实现增删)

React表格添加人员编辑功能实现方案

1. 新增编辑相关状态

在组件中添加两个核心状态,分别存储当前编辑的人员数据和编辑目标ID:

const [editFormData, setEditFormData] = useState({
  firstName: "",
  lastName: "",
  salary: "",
});
const [editContactId, setEditContactId] = useState(null);

2. 在表格行中添加编辑按钮并绑定触发逻辑

修改表格渲染代码,为每一行添加编辑按钮,点击时将当前行数据填充到编辑表单,并记录编辑目标ID:

{contacts.map((row) => (
  <TableRow key={row.id}>
    <TableCell>{row.firstName}</TableCell>
    <TableCell>{row.lastName}</TableCell>
    <TableCell>{row.salary}</TableCell>
    <TableCell>
      <button 
        onClick={() => {
          setEditContactId(row.id);
          setEditFormData({
            firstName: row.firstName,
            lastName: row.lastName,
            salary: row.salary,
          });
          // 打开编辑模态框,可根据你现有模态框逻辑调整,比如setShowEdit(true)
        }}
      >
        编辑
      </button>
    </TableCell>
    {/* 保留你原有的删除按钮 */}
  </TableRow>
))}

注意:不要用index作为key和行ID,改用每个联系人自带的row.id(你新增时用nanoid生成的),避免数据更新时出现渲染异常。

3. 实现编辑表单的变更与提交逻辑

编写编辑表单的输入变更处理和提交保存逻辑:

// 编辑表单输入变更处理
const handleEditFormChange = (event) => {
  event.preventDefault();
  const fieldName = event.target.name;
  const fieldValue = event.target.value;
  const newFormData = { ...editFormData };
  newFormData[fieldName] = fieldValue;
  setEditFormData(newFormData);
};

// 编辑提交保存处理
const handleEditFormSubmit = (event) => {
  event.preventDefault();
  const updatedContact = {
    id: editContactId,
    firstName: editFormData.firstName,
    lastName: editFormData.lastName,
    salary: editFormData.salary,
  };

  // 替换原数组中对应ID的联系人数据
  const updatedContacts = contacts.map((contact) => {
    if (contact.id === editContactId) {
      return updatedContact;
    }
    return contact;
  });

  setContacts(updatedContacts);
  setEditContactId(null); // 清除编辑状态
  setShowEdit(false); // 关闭编辑模态框,根据你的模态框状态调整
};

4. 渲染编辑表单(模态框内)

复用类似新增表单的结构,在模态框中承载编辑表单,绑定编辑相关处理函数:

{editContactId && (
  <Modal show={showEdit} onHide={() => setShowEdit(false)}>
    <Modal.Header closeButton>
      <Modal.Title>编辑人员信息</Modal.Title>
    </Modal.Header>
    <Modal.Body>
      <form onSubmit={handleEditFormSubmit}>
        <div>
          <label>姓氏:</label>
          <input
            type="text"
            name="firstName"
            value={editFormData.firstName}
            onChange={handleEditFormChange}
            required
          />
        </div>
        <div>
          <label>名字:</label>
          <input
            type="text"
            name="lastName"
            value={editFormData.lastName}
            onChange={handleEditFormChange}
            required
          />
        </div>
        <div>
          <label>薪资:</label>
          <input
            type="text"
            name="salary"
            value={editFormData.salary}
            onChange={handleEditFormChange}
            required
          />
        </div>
        <button type="submit">保存修改</button>
      </form>
    </Modal.Body>
  </Modal>
)}

内容的提问来源于stack exchange,提问作者GO-SOSO-GO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:30:48