当前位置:首页 > 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
分享给朋友:

相关文章

vue表单实现搜索

vue表单实现搜索

实现 Vue 表单搜索功能 基础表单绑定 在 Vue 中通过 v-model 实现表单输入与数据的双向绑定,搜索框通常绑定一个字符串类型的数据。 <template> <inp…

form表单elementui

form表单elementui

Form 表单 ElementUI 使用指南 ElementUI 提供了强大的表单组件,支持数据绑定、验证和自定义样式等功能。以下是使用方法和常见场景的解决方案。 基本表单结构 使用 el-form…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

react如何下载

react如何下载

安装 React 的步骤 通过 npm 或 yarn 安装 React,确保已安装 Node.js(版本建议 ≥ 14.0.0)。打开终端或命令行工具,运行以下命令: npx create-reac…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

react如何减少伤病

react如何减少伤病

减少React应用中的性能问题(避免"伤病") 优化React应用性能需要从组件渲染、状态管理和外部依赖等多方面入手。以下是关键优化策略: 使用React.memo进行组件记忆 对函数组件使用Rea…