当前位置:首页 > React

react实现表单验证

2026-01-27 09:17:18React

使用 React Hook Form 进行表单验证

React Hook Form 是一个轻量级的表单库,提供了高性能的表单验证功能。安装依赖:

npm install react-hook-form

基本用法示例:

import { useForm } from 'react-hook-form';

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

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

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register('name', { required: true })} />
      {errors.name && <span>This field is required</span>}

      <input {...register('age', { pattern: /\d+/ })} />
      {errors.age && <span>Please enter number</span>}

      <input type="submit" />
    </form>
  );
}

使用 Yup 进行复杂验证

结合 Yup 可以实现更复杂的验证规则。安装依赖:

react实现表单验证

npm install @hookform/resolvers yup

示例代码:

import { useForm } from 'react-hook-form';
import { yupResolver } from '@hookform/resolvers/yup';
import * as yup from 'yup';

const schema = yup.object().shape({
  name: yup.string().required(),
  age: yup.number().positive().integer(),
  email: yup.string().email()
});

function App() {
  const { register, handleSubmit, formState: { errors } } = useForm({
    resolver: yupResolver(schema)
  });

  return (
    <form onSubmit={handleSubmit(data => console.log(data))}>
      <input {...register('name')} />
      {errors.name && <p>{errors.name.message}</p>}

      <input {...register('age')} />
      {errors.age && <p>{errors.age.message}</p>}
    </form>
  );
}

自定义验证逻辑

可以直接在 register 方法中定义验证规则:

react实现表单验证

<input
  {...register('password', {
    validate: value =>
      value.length >= 6 || 'Password must be at least 6 characters'
  })}
/>
{errors.password && <p>{errors.password.message}</p>}

表单状态管理

React Hook Form 提供了多种表单状态:

const {
  isDirty,       // 表单是否被修改
  isValid,       // 表单是否有效
  isSubmitting,  // 表单是否正在提交
  touchedFields, // 被触摸过的字段
  submitCount    // 提交次数
} = formState;

动态表单字段验证

对于动态生成的表单字段,可以使用 Controller 组件:

import { Controller } from 'react-hook-form';

<Controller
  name="test"
  control={control}
  render={({ field }) => <input {...field} />}
/>

错误消息显示优化

可以创建统一的错误显示组件:

function ErrorMessage({ errors, name }) {
  return errors[name] ? (
    <p className="error">{errors[name].message}</p>
  ) : null;
}

// 使用方式
<ErrorMessage errors={errors} name="email" />

标签: 表单react
分享给朋友:

相关文章

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…

react如何编码参数

react如何编码参数

编码参数的方法 在React中,编码参数通常涉及URL查询参数或路由参数的编码和解码。以下是几种常见场景的处理方法: URL查询参数编码 使用encodeURIComponent对参数进行编码,避免…

react如何封装router

react如何封装router

封装 React Router 的基本方法 在 React 中封装 Router 通常是为了统一管理路由配置、添加中间件或增强功能。以下是几种常见的封装方式: 基于 react-router-dom…

如何退出react项目

如何退出react项目

退出 React 项目的方法 关闭开发服务器 如果正在运行开发服务器(如通过 npm start 或 yarn start),在终端中按 Ctrl + C(Windows/Linux)或 Comman…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent…