まず、Yupスキーマを定義します。Yupスキーマは、フィールドのバリデーションルールを指定するためのものです。例えば、必須フィールドであるか、特定のパターンに一致するか、特定の範囲内にあるかなどを指定できます。
次に、Formikを使用してフォームを作成します。Formikは、Reactコンポーネントとフォームの状態管理を容易にするためのライブラリです。
外部変数に基づいてフィールドのバリデーションを行うには、Yupスキーマのwhen
メソッドを使用します。when
メソッドは、特定のフィールドの値や他のフィールドの値に基づいて、条件に応じたバリデーションルールを適用することができます。
例えば、以下のコードでは、email
フィールドがtrue
の場合にのみ、required
バリデーションルールを適用しています。
import * as Yup from 'yup';
import { useFormik } from 'formik';
const validationSchema = Yup.object().shape({
email: Yup.string().when('outsideVariable', {
is: true,
then: Yup.string().required('Email is required'),
}),
});
const MyForm = () => {
const formik = useFormik({
initialValues: {
email: '',
},
validationSchema,
onSubmit: values => {
// フォームの送信処理
},
});
return (
<form onSubmit={formik.handleSubmit}>
<input
type="text"
name="email"
value={formik.values.email}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
/>
{formik.touched.email && formik.errors.email ? (
<div>{formik.errors.email}</div>
) : null}
<button type="submit">Submit</button>
</form>
);
};
上記の例では、outsideVariable
という外部変数に基づいて、email
フィールドのバリデーションが条件付きで適用されます。outsideVariable
がtrue
の場合、email
フィールドが必須となります。
これで、YupとFormikを使用して外部変数に基づいた条件付きバリデーションを実装する方法を学びました。この方法を使えば、より柔軟なフォームバリデーションを実現することができます。