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

如何将对象赋值给React Hook的setFormData(react-hook-form使用问题)

问题解决方法

核心错误原因

  • React useState 返回的第二个值setFormData是状态更新函数,不能直接用=赋值,直接赋值会覆盖这个函数本身,不会触发状态更新,也不会修改formData的值
  • 状态更新是异步操作,调用setFormData后当前渲染周期内拿到的formData还是更新前的旧值,所以直接打印会为空

正确实现代码

你需要调用setFormData方法,把表单返回的data传入即可,解构整合的写法如下:

const onSubmit = (data) => {
  Swal.fire('Congratulation!', completeFormStep(), 'success');
  // 方法1:直接传入整个data(适合formData只存表单数据的场景)
  // setFormData(data)
  // 方法2:解构赋值,和上面效果等价,也可以额外追加其他自定义字段
  setFormData({...data}) 

  // 这里打印的是当前渲染周期的旧formData,拿不到新值属于正常现象
  console.log('当前旧formData:', formData); 
  // 直接打印data就能拿到最新的表单提交值
  console.log('最新表单数据:', data); 
};

// 如果需要在formData更新后做操作,添加useEffect监听即可
useEffect(() => {
  console.log('formData更新完成,最新值:', formData)
}, [formData])

特殊场景补充

如果你的formData初始值里还有其他和表单无关的字段,不想被覆盖,可以用函数式更新保留原有字段:

setFormData(prevState => ({
  ...prevState, // 保留原有所有字段
  ...data // 仅覆盖表单返回的同名字段
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:54:01