当前位置:首页 > 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 可以实现更复杂的验证规则。安装依赖:

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 方法中定义验证规则:

<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
分享给朋友:

相关文章

css怎么制作表单

css怎么制作表单

基础表单结构 使用HTML创建表单元素,搭配CSS进行样式设计。表单通常包含<form>标签及输入控件(如<input>、<textarea>、<select…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

vue实现表单

vue实现表单

Vue 表单实现方法 基础表单绑定 Vue 提供了 v-model 指令实现表单元素的双向数据绑定。在组件中定义数据属性,通过 v-model 绑定到表单元素: <template>…

vue表单实现

vue表单实现

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单输入与应用状态的双向绑定,适用于各类表单控件。例如文本输入框: <input v-model="message" pla…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…