首頁 > web前端 > js教程 > 使用 YUP 進行表單驗證

使用 YUP 進行表單驗證

DDD
發布: 2024-12-29 03:51:10
原創
179 人瀏覽過

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板