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

react-hook-form中validate对象校验用法及多错误消息获取方法

实现方案

步骤1:调整validate规则的返回逻辑

校验不通过时直接返回对应错误提示字符串,代替原有的布尔值false即可,修改后的字段注册代码如下:

<input
  {...register("test1", {
    validate: {
      positive: v => parseInt(v) > 0 || "Number is not positive",
      lessThanTen: v => parseInt(v) < 10 || "Number is not less than 10",
      checkUrl: async () => {
        const res = await fetch()
        return res.ok || "Url check failed"
      },
    }
  })}
/>

步骤2:读取对应校验项的错误信息

从useForm导出的errors对象中,可直接通过校验规则的键名访问对应错误,规则如下:

  • 字段对应的错误集合路径为 errors.[字段名],此处即errors.test1
  • 每个自定义validate的键名会直接对应错误集合下的同名属性,调用message属性即可拿到你自定义的错误文本

完整组件示例:

import { useForm } from "react-hook-form"

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

  const onSubmit = (data) => console.log(data)

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input
        {...register("test1", {
          validate: {
            positive: v => parseInt(v) > 0 || "Number is not positive",
            lessThanTen: v => parseInt(v) < 10 || "Number is not less than 10",
          }
        })}
      />
      {/* 单独展示positive规则的错误 */}
      {errors.test1?.positive && <p>{errors.test1.positive.message}</p>}
      {/* 单独展示lessThanTen规则的错误 */}
      {errors.test1?.lessThanTen && <p>{errors.test1.lessThanTen.message}</p>}
      
      <input type="submit" />
    </form>
  )
}

如果输入值为-5,此时positive规则校验不通过,会渲染Number is not positive提示,lessThanTen规则校验通过则不会展示对应提示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:01