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

react-hook-form创建表单校验时出现reading 'name'的undefined类型错误

报错根因
  • 版本适配问题:你使用的是react-hook-form v7及以上版本,该版本调整了返回值结构,errors不再是useForm()的直接返回属性,而是封装在formState对象中。你直接从useForm()返回值解构errors会得到undefined,读取undefined.name就触发了本次类型错误。
  • 依赖引入缺失:代码中使用了useState但没有对应引入,运行时也会触发报错。
  • 表单绑定缺失:除name字段外,email、subject、description三个输入框都没有绑定register方法,后续提交时无法正常获取字段值,也无法触发对应校验规则。
修复步骤

1. 补充基础依赖引入

在代码顶部添加React和useState的引入:

import React, { useState } from 'react'

2. 调整useForm解构逻辑

将原有的解构代码:

const { register, handleSubmit, errors } = useForm();

替换为从formState中提取errors:

const { register, handleSubmit, formState: { errors } } = useForm();

3. 优化错误信息判空逻辑

将原有的错误展示写法:

<p> {errors.name && errors.name.message} </p>

替换为可选链写法,语法更简洁,同时避免层级读取的类型报错:

<p> {errors?.name?.message} </p>

4. 给其余表单字段补充register绑定

按name字段的逻辑,给email、subject、description字段补充绑定和对应校验规则即可,示例如下:

{/* Email Input */}
<input 
  type="email" 
  className="form-control" 
  placeholder="E-mail" 
  name="email"
  {...register("email", {
    required: "请输入邮箱地址",
    pattern: {
      value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
      message: "请输入合法的邮箱格式"
    }
  })}
/>
<span className="error-message">
  <p> {errors?.email?.message} </p>
</span>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:09:00