当前位置:首页 > React

react如何校验表单

2026-02-11 22:48:17React

表单校验的基本方法

React中表单校验可以通过多种方式实现,包括内置的HTML5校验、自定义校验逻辑或第三方库。以下是几种常见方法:

使用HTML5内置校验属性 在表单元素上添加requiredpattern等HTML5属性实现基础校验:

<input 
  type="email" 
  required 
  pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"
/>

手动校验状态管理 通过React的state和事件处理器实现自定义校验:

const [errors, setErrors] = useState({});

const validate = () => {
  const newErrors = {};
  if (!formData.username) newErrors.username = 'Required';
  if (!/\S+@\S+\.\S+/.test(formData.email)) newErrors.email = 'Invalid email';
  setErrors(newErrors);
  return Object.keys(newErrors).length === 0;
};

第三方库解决方案

Formik + Yup组合 Formik处理表单状态,Yup提供声明式校验规则:

import * as Yup from 'yup';

const validationSchema = Yup.object().shape({
  email: Yup.string().email('Invalid email').required('Required'),
  password: Yup.string().min(8, 'Too short').required('Required')
});

<Formik
  initialValues={{ email: '', password: '' }}
  validationSchema={validationSchema}
>
  {({ errors, touched }) => (
    <Form>
      <Field name="email" />
      {touched.email && errors.email && <div>{errors.email}</div>}
    </Form>
  )}
</Formik>

React Hook Form 轻量级库,支持高性能校验:

react如何校验表单

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

<form onSubmit={handleSubmit(data => console.log(data))}>
  <input {...register('email', { required: true, pattern: /^\S+@\S+$/i })} />
  {errors.email?.type === 'required' && <span>Required</span>}
</form>

实时校验与提交校验

实时校验(onChange) 在输入变化时立即触发校验:

<input
  onChange={(e) => {
    setValue(e.target.value);
    if (!e.target.value) setError('Cannot be empty');
  }}
/>

提交时校验(onSubmit) 仅在表单提交时执行完整校验:

const handleSubmit = (e) => {
  e.preventDefault();
  const isValid = validateAllFields();
  if (!isValid) return;
  // 提交逻辑
};

错误提示展示

错误信息通常与表单字段绑定显示:

react如何校验表单

<div className="form-group">
  <label>Username</label>
  <input type="text" {...register('username', { required: true })} />
  {errors.username && <span className="error">This field is required</span>}
</div>

CSS样式示例:

.error {
  color: red;
  font-size: 0.8em;
}
.form-group {
  margin-bottom: 1rem;
}

复杂校验场景处理

异步校验 处理需要服务器验证的情况:

const validateEmail = async (value) => {
  const response = await fetch(`/api/check-email?email=${value}`);
  return response.ok ? true : 'Email already exists';
};

<input {...register('email', { validate: validateEmail })} />

交叉字段校验 比较多个字段值(如密码确认):

const validationSchema = Yup.object().shape({
  password: Yup.string().required(),
  confirmPassword: Yup.string()
    .oneOf([Yup.ref('password'), null], 'Passwords must match')
});

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

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment 包。确保项目中已安装 moment.js,因为 react-moment 依赖它。 npm install…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

vue实现表单

vue实现表单

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

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…