YUPによるフォーム検証

DDD
DDDオリジナル
2024-12-29 03:51:10205ブラウズ

Form validation with YUP

React with Yup でフォーム検証を簡素化する

Web アプリケーションを構築する場合、フォーム検証はデータの整合性を確保するための鍵となります。 React でフォームを検証するシンプルかつ強力な方法をお探しなら、Yup があなたの親友です。このブログでは、Yup をセットアップし、検証を備えた洗練されたフォームを作成する手順を説明します。


学べること

このブログを読み終えるまでに、次の方法がわかるようになります:

  1. React で検証用に Yup を設定します。
  2. 検証ルールを使用してフォームを作成します。
  3. 外部 CSS を使用してフォームのスタイルを設定します。

前提条件

始める前に、次のことを確認してください。

  • React の基礎知識
  • Node.js がコンピューターにインストールされています。

ステップ 1: セットアップをする

まず、Yup を React プロジェクトにインストールします。ターミナルで次のコマンドを実行します:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。