ホームページ >ウェブフロントエンド >jsチュートリアル >YUPによるフォーム検証
Web アプリケーションを構築する場合、フォーム検証はデータの整合性を確保するための鍵となります。 React でフォームを検証するシンプルかつ強力な方法をお探しなら、Yup があなたの親友です。このブログでは、Yup をセットアップし、検証を備えた洗練されたフォームを作成する手順を説明します。
このブログを読み終えるまでに、次の方法がわかるようになります:
始める前に、次のことを確認してください。
まず、Yup を React プロジェクトにインストールします。ターミナルで次のコマンドを実行します:
npm install yup
これは、名前とメールアドレスのフィールドを備えた単純なフォームです。 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;
さあ、統合する時が来ました。検証スキーマを作成し、送信されたフォーム データを確認します。
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); } };
フォームの見栄えを良くするには、外部 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 サイトの他の関連記事を参照してください。