
在 react hook form 中,`e.preventdefault()` 无效的根本原因在于错误地包装了 `handlesubmit`;正确做法是直接将 `handlesubmit(回调)` 赋值给 `onsubmit`,由库自动处理事件拦截与默认行为阻止。
React Hook Form 的设计哲学之一是接管并封装原生表单提交逻辑——它内部已自动调用 event.preventDefault(),前提是开发者正确使用其 API。一旦你像下面这样手动包裹 handleSubmit:
// ❌ 错误:自行创建箭头函数,导致 handleSubmit 无法接收原生 SubmitEvent
onSubmit={() => handleSubmit((e) => handleAddNewItem(e))}问题就出现了:
- 外层箭头函数 () => ... 没有接收 event 参数,原生提交事件被丢弃;
- handleSubmit 因未接收到真实事件对象,无法执行内置的 preventDefault() 和表单验证流程;
- 最终浏览器按原生逻辑刷新页面。
✅ 正确写法极其简洁:
<form onSubmit={handleSubmit(handleAddNewItem)} className="space-y-8">此时 handleSubmit 作为事件处理器直接挂载到









