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

React组件提交时e.target.name报undefined错误求助

解决点击Save按钮出现的TypeError: Cannot read properties of undefined (reading 'name')错误

错误原因

问题出在handleEditSetup函数的fetch回调里:

.then(data => {
  handleChange(data)
})

handleChange是为表单输入事件设计的,它的参数应该是浏览器的事件对象(e),但你传入了后端返回的data对象。这时候handleChange里访问e.target会得到undefined,进而触发Cannot read properties of undefined (reading 'name')的报错。

修复方案

1. 替换错误的handleChange调用

不要用handleChange处理后端返回的数据,直接用setFormData更新状态,或者根据业务需求完成后续操作:

function handleEditSetup(e) {
  e.preventDefault();

  fetch(`/setups/${id}`, {
    method: "PATCH",
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(formData)
  })
  .then(res => res.json())
  .then(data => {
    // 用后端返回的更新后数据同步表单状态
    setFormData(data);
    // 可选:退出编辑模式
    setIsEdit(false);
  })
  .catch(err => console.error('更新失败:', err)) // 建议加上错误捕获
}

2. 避免初始化时的潜在报错

如果setup props是异步加载的(比如从API获取),初始渲染时可能为undefined,直接解构会导致报错。可以给解构加上默认值:

const {name = "", description = "", photo = "", genre = "", id = ""} = setup || {};

修改后的完整组件关键代码

function EditSetup({setup, isEdit, setIsEdit}) {
  const { user, setUser } = useContext(UserContext);
  // 加默认值避免setup为undefined时报错
  const {name = "", description = "", photo = "", genre = "", id = ""} = setup || {};

  const [formData, setFormData] = useState({
    name: name,
    description: description,
    photo: photo,
    genre: genre
  });


  function handleChange(e) {
    setFormData({...formData, [e.target.name]: e.target.value})
  }

  function handleEditSetup(e) {
    e.preventDefault();

    fetch(`/setups/${id}`, {
      method: "PATCH",
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(formData)
    })
    .then(res => res.json())
    .then(data => {
      setFormData(data);
      setIsEdit(false);
    })
    .catch(err => console.error('更新失败:', err))
  }

  // ... 返回部分不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:10:40