Reactを使用すると、フォームのバリデーションを簡単に実装できます。この記事では、Reactを使用してフォームのバリデーションを実装する方法について説明します。
バリデーションライブラリの使用
Reactでフォームのバリデーションを実装する場合、バリデーションライブラリを使用するのが一般的です。多くのバリデーションライブラリがありますが、この記事では、Yupを使用します。
Yupは、スキーマベースのバリデーションライブラリで、簡単にバリデーションスキーマを定義できます。Yupを使用するには、まずYupをインストールします。
npm install yup
次に、Yupを使用してバリデーションスキーマを定義します。例えば、以下のように名前とメールアドレスが必須であるフォームのバリデーションスキーマを定義できます。
import * as Yup from 'yup';
const validationSchema = Yup.object().shape({
name: Yup.string().required('名前を入力してください'),
email: Yup.string()
.email('正しい形式でメールアドレスを入力してください')
.required('メールアドレスを入力してください'),
});
これで、名前とメールアドレスが必須であるフォームのバリデーションスキーマが定義されました。次に、Reactのフォームコンポーネントでこのバリデーションスキーマを使用してバリデーションを実行します。
バリデーションの実装
Reactのフォームコンポーネントでバリデーションを実装する場合、以下の手順に従います。
- Yupのバリデーションスキーマを定義します。
- フォームの各フィールドに対して、
value
とonChange
プロパティを設定します。value
には、フォームの入力値を、onChange
には、フォームの入力値が変更されたときに呼び出されるコールバック関数を設定します。 - フォームの
onSubmit
プロパティに、フォームが送信されたときに呼び出されるコ
ールバック関数を設定します。この関数内で、Yupのvalidate
メソッドを使用してバリデーションを実行し、エラーがある場合はエラーメッセージを表示します。
import React, { useState } from 'react';
import { useFormik } from 'formik';
import * as Yup from 'yup';
const validationSchema = Yup.object().shape({
name: Yup.string().required('名前を入力してください'),
email: Yup.string()
.email('正しい形式でメールアドレスを入力してください')
.required('メールアドレスを入力してください'),
});
const Form = () => {
const [submitting, setSubmitting] = useState(false);
const formik = useFormik({
initialValues: {
name: '',
email: '',
},
validationSchema: validationSchema,
onSubmit: (values) => {
setSubmitting(true);
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
setSubmitting(false);
}, 1000);
},
});
return (
<form onSubmit={formik.handleSubmit}>
<div>
<label htmlFor="name">名前</label>
<input
type="text"
id="name"
name="name"
value={formik.values.name}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
/>
{formik.touched.name && formik.errors.name ? (
<div>{formik.errors.name}</div>
) : null}
</div>
<div>
<label htmlFor="email">メールアドレス</label>
<input
type="email"
id="email"
name="email"
value={formik.values.email}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
/>
{formik.touched.email && formik.errors.email ? (
<div>{formik.errors.email}</div>
) : null}
</div>
<button type="submit" disabled={submitting}>
送信
</button>
</form>
);
};
export default Form;
この例では、useFormik
フックを使用してフォームを管理しています。initialValues
プロパティには、フォームの初期値を設定します。validationSchema
プロパティには、Yupのバリデーションスキーマを設定します。onSubmit
プロパティには、フォームが送信されたときに呼び出されるコールバック関数を設定します。この関数内では、フォームの値をJSON形式でアラートに表示しています。
フォームの各フィールドには、value
とonChange
プロパティを設定しています。また、onBlur
プロパティを設定して、フィールドがフォーカスを失ったときにバリデーションを実行します。formik.touched
オブジェクトを使用して、フィールドがタッチされたかどうかを確認し、エラーメッセージを表示します。