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

React onClick报错:期望函数类型却传入对象,客户删除功能失效

问题排查与修复方案

1. 前端onClick事件错误(核心报错原因)

控制台报错是因为你在Button的onClick中直接执行了deleteDocument(item._id),这会立即调用函数并返回其结果(Promise对象),而onClick需要接收一个函数引用。

修复代码(Customers.js)

<Button variant="contained" color="secondary" onClick={() => deleteDocument(item._id)} >
  Delete
</Button>

2. 前端useEffect使用不当

useEffect的回调函数不能是async函数,因为async函数会返回Promise,而useEffect期望回调返回清理函数或者undefined。

修复代码(Customers.js)

useEffect(() => {
  const fetchData = async () => {
    const res = await axios.get("http://localhost:5000/customers");
    setData(res.data);
  };
  fetchData();
}, []);

3. 前端状态更新的竞态问题

删除后更新状态时,直接使用data.filter可能会因为闭包导致拿到的不是最新状态,应该使用函数式更新。

修复代码(Customers.js的deleteDocument函数)

const deleteDocument = async (_id) => {
  await axios.delete(`http://localhost:5000/customers/${_id}`);
  // 使用函数式更新获取最新状态
  setData(prevData => prevData.filter((doc) => doc._id !== _id));
};

4. 后端路由与前端请求不匹配

前端删除请求的路径是/customers/:id,但后端定义的删除路由是/customer/:id(少了s),导致请求404。

修复代码(userdata.js)

router.delete('/customers/:id', function(req, res, next) {
  // 移除多余的req.body参数,删除操作不需要请求体
  user.findByIdAndRemove(req.params.id, function (err, post) {
    if (err) return next(err);
    res.json(post);
  });
});

5. 后端冗余代码清理

后端中的deleteDocument函数未被使用,属于冗余代码,直接删除即可:

// 删掉这段冗余代码
function deleteDocument(id) {
  axios.delete(`http://localhost:5000/customer/${id}`)
  .then(res => {
    console.log(res);
    // handle success if needed
  })
  .catch(err => {
    console.log(err);
    // handle error if needed
  });
}

额外优化建议

  • 为删除操作添加错误处理,提示用户删除状态:
const deleteDocument = async (_id) => {
  try {
    await axios.delete(`http://localhost:5000/customers/${_id}`);
    setData(prevData => prevData.filter((doc) => doc._id !== _id));
  } catch (err) {
    console.error('删除失败:', err);
    // 可添加用户提示,比如alert('删除失败,请重试')
  }
};
  • 后端路由改用async/await风格,保持代码一致性:
router.delete('/customers/:id', async (req, res, next) => {
  try {
    const post = await user.findByIdAndRemove(req.params.id);
    res.json(post);
  } catch (err) {
    next(err);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:59:55