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

react-hook-form 如何在表单加载时无需点击提交显示全部错误信息

实现方案

以下方案适配你使用的5.7.2版本,无需升级依赖即可直接使用

通过react-hook-form内置的trigger()主动触发全表单校验,配合useEffect在组件挂载完成后执行,即可实现页面加载完成直接展示所有校验错误的效果。

完整代码示例

import React, { useEffect } from 'react';
import { useForm } from 'react-hook-form';

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

  const submitHandler = (data) => console.log('提交数据:', data);

  // 组件挂载后自动触发全表单校验
  useEffect(() => {
    trigger(); // 无参数默认校验所有表单字段
  }, [trigger]);

  return (
    <form onSubmit={handleSubmit(submitHandler)}>
      <input
        name="username"
        ref={register({
          required: '用户名不能为空',
          minLength: { value: 3, message: '用户名长度不能少于3位' }
        })}
      />
      {errors.username && <span className="error">{errors.username.message}</span>}

      <input
        name="phone"
        ref={register({
          required: '手机号不能为空',
          pattern: { value: /^1[3-9]\d{9}$/, message: '请输入正确的手机号' }
        })}
      />
      {errors.phone && <span className="error">{errors.phone.message}</span>}

      <button type="submit">提交</button>
    </form>
  );
}

扩展说明

  • 若只需校验指定字段,可向trigger()传入对应字段名或字段名数组,示例:
    trigger('username'); // 仅校验用户名字段
    trigger(['username', 'phone']); // 仅校验用户名、手机号两个字段
    
  • 若需要在校验完成后执行后续逻辑,可通过异步方式接收校验结果:
    useEffect(() => {
      const runValidate = async () => {
        const isValid = await trigger();
        // 校验完成后执行的逻辑
        console.log('表单是否校验通过:', isValid);
      };
      runValidate();
    }, [trigger]);
    

内容的提问来源于stack exchange,提问作者Pradeepta Kumar Khatoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:09:01