首页 >web前端 >js教程 >使用 YUP 进行表单验证

使用 YUP 进行表单验证

DDD
DDD原创
2024-12-29 03:51:10205浏览

Form validation with YUP

使用 Yup 简化 React 中的表单验证

构建 Web 应用程序时,表单验证是确保数据完整性的关键。如果您正在寻找一种简单而强大的方法来验证 React 中的表单,是的 是您最好的朋友!本博客将引导您完成设置 Yup 并创建经过验证的精美表单的步骤。


你将学到什么

读完本博客,您将知道如何:

  1. 在 React 中设置 Yup 进行验证。
  2. 构建带有验证规则的表单。
  3. 使用外部 CSS 设置表单样式。

先决条件

开始之前,请确保您拥有:

  • React 基础知识。
  • Node.js 安装在您的计算机上。

第 1 步:设置 是的

首先,在你的 React 项目中安装 Yup。在终端中运行以下命令:

npm install yup

第 2 步:创建表单

这是一个简单的表单,其中包含姓名和电子邮件字段。我们将使用 React 的 useState 来管理输入值和错误。

import React, { useState } from 'react';

function MyForm() {
  const [formData, setFormData] = useState({ name: '', email: '' });
  const [errors, setErrors] = useState({});

  const handleChange = (e) => {
    setFormData({ ...formData, [e.target.name]: e.target.value });
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    // Validation will go here
  };

  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label>Name:</label>
        <input
          type="text"
          name="name"
          value={formData.name}
          onChange={handleChange}
        />
      </div>
      <div>
        <label>Email:</label>
        <input
          type="email"
          name="email"
          value={formData.email}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
}

export default MyForm;

步骤3:

现在是时候整合了是的。我将创建一个验证架构,然后在提交后检查表单数据。

import * as Yup from "yup"

const validationSchema = Yup.object({
name: Yup.string().required('Name is required!')
email: Yup.string().email('Your email is invalid').required('email is required')
})

我将在handleSubmit 函数中使用此架构来验证表单

  const handleSubmit = (e) => {
    e.preventDefault();
    try {
    await validationSchema.validate(formData, { abortEarly: false });
    setErrors({});
    alert('Form is valid!');
  } catch (err) {
    const newErrors = {};
    err.inner.forEach((error) => {
      newErrors[error.path] = error.message;
    });
    setErrors(newErrors);
  }
  };

第 4 步:设计表单样式

为了使表单看起来不错,请创建一个外部 CSS 文件 (MyForm.css) 并添加以下样式:

.form-container {
  max-width: 400px;
  margin: 50px auto;
  padding: 20px;
  background: #f9f9f9;
  border-radius: 8px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.label {
  font-weight: bold;
}
.input {
  width: 100%;
  padding: 10px;
  margin: 5px 0;
  border-radius: 4px;
}
.error {
  color: red;
  font-size: 12px;
}
.button {
  background: #4caf50;
  color: white;
  padding: 10px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
.button:hover {
  background: #45a049;
}

将 CSS 文件导入到您的组件中:

import './MyForm.css';

完整代码:

import React, { useState } from 'react';
import * as Yup from 'yup';
import './MyForm.css';

function MyForm() {
  const [formData, setFormData] = useState({ name: '', email: '' });
  const [errors, setErrors] = useState({});

  const validationSchema = Yup.object({
    name: Yup.string().required('Name is required!'),
    email: Yup.string().email('Invalid email!').required('Email is required!'),
  });

  const handleChange = (e) => {
    setFormData({ ...formData, [e.target.name]: e.target.value });
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    try {
      await validationSchema.validate(formData, { abortEarly: false });
      setErrors({});
      alert('Form is valid!');
    } catch (err) {
      const newErrors = {};
      err.inner.forEach((error) => {
        newErrors[error.path] = error.message;
      });
      setErrors(newErrors);
    }
  };

  return (
    <div className="form-container">
      <h1>Simple Form</h1>
      <form onSubmit={handleSubmit}>
        <div>
          <label className="label">Name:</label>
          <input
            type="text"
            name="name"
            value={formData.name}
            onChange={handleChange}
            className="input"
          />
          {errors.name && <div className="error">{errors.name}</div>}
        </div>
        <div>
          <label className="label">Email:</label>
          <input
            type="email"
            name="email"
            value={formData.email}
            onChange={handleChange}
            className="input"
          />
          {errors.email && <div className="error">{errors.email}</div>}
        </div>
        <button type="submit" className="button">Submit</button>
      </form>
    </div>
  );
}

export default MyForm;

结论

是的,即使没有 Formik,它也是一个强大的表单验证工具。只需几行代码,您就可以为您的 React 应用程序添加强大的验证。

以上是使用 YUP 进行表单验证的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn