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

React中如何通过Fetch方法根据点击项ID删除数据库指定数据

在React中通过Fetch根据ID删除数据条目

别着急,这个问题拆成两步就很清晰了:先拿到点击项的ID,再用Fetch发送删除请求。我给你一步步演示,附带完整的示例代码。

第一步:获取点击按钮对应项的ID

当你渲染数据列表的时候,只需要在每个删除按钮的点击事件里,把当前条目的ID传进去就行。比如用map遍历数组渲染列表项时,直接把item.id作为参数传给删除函数:

function TodoList({ todos }) {
  const handleDelete = (itemId) => {
    // 这里就能拿到点击项的ID了,接下来就是发送删除请求
    console.log("要删除的ID:", itemId);
  };

  return (
    <ul>
      {todos.map((todo) => (
        <li key={todo.id}>
          {todo.title}
          {/* 点击按钮时把当前todo的ID传给handleDelete */}
          <button onClick={() => handleDelete(todo.id)}>删除</button>
        </li>
      ))}
    </ul>
  );
}

这里的关键是用箭头函数包裹handleDelete调用——如果直接写onClick={handleDelete(todo.id)},会在渲染时就执行函数,而不是点击按钮时才触发。用箭头函数就能确保点击时才传递当前条目的ID。

第二步:用Fetch发送DELETE请求删除数据

拿到ID之后,就可以调用Fetch的DELETE方法请求后端接口了。注意要指定请求方法为DELETE,如果后端需要JSON格式参数或认证信息,也要在headers里配置:

const handleDelete = async (itemId) => {
  try {
    const response = await fetch(`/api/todos/${itemId}`, {
      method: "DELETE",
      headers: {
        "Content-Type": "application/json",
        // 如果需要认证(比如JWT),可以在这里加:Authorization: `Bearer ${token}`
      },
    });

    if (!response.ok) {
      throw new Error("删除请求失败");
    }

    // 删除成功后,更新前端状态,把对应的条目从列表里移除
    // 假设你的状态是用useState管理的:const [todos, setTodos] = useState([]);
    setTodos(prevTodos => prevTodos.filter(todo => todo.id !== itemId));
    alert("删除成功!");
  } catch (error) {
    console.error("删除出错:", error);
    alert("删除失败,请重试");
  }
};

完整的组件示例

把上面的部分整合起来,一个完整的删除功能组件大概是这样的:

import { useState, useEffect } from "react";

function TodoList() {
  const [todos, setTodos] = useState([]);

  // 模拟从后端获取初始数据
  useEffect(() => {
    const fetchTodos = async () => {
      const response = await fetch("/api/todos");
      const data = await response.json();
      setTodos(data);
    };
    fetchTodos();
  }, []);

  const handleDelete = async (itemId) => {
    try {
      const response = await fetch(`/api/todos/${itemId}`, {
        method: "DELETE",
        headers: {
          "Content-Type": "application/json",
        },
      });

      if (!response.ok) {
        throw new Error("删除请求失败");
      }

      // 更新本地状态,同步UI
      setTodos(prev => prev.filter(todo => todo.id !== itemId));
    } catch (err) {
      console.error("删除错误:", err);
    }
  };

  return (
    <div>
      <h2>待办列表</h2>
      <ul>
        {todos.map(todo => (
          <li key={todo.id} style={{ display: "flex", gap: "10px", margin: "5px 0" }}>
            <span>{todo.title}</span>
            <button onClick={() => handleDelete(todo.id)}>删除</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default TodoList;

注意事项

  • 确保后端的DELETE接口已经正确配置,能接收URL里的ID参数并处理删除逻辑
  • 一定要处理请求失败的情况:比如网络错误、后端返回错误状态码,用try/catch或者检查response.ok来捕获异常
  • 前端状态更新要放在请求成功之后,这样UI才能实时反映删除后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:31:28