まず、Yupをインストールしましょう。プロジェクトのルートディレクトリで以下のコマンドを実行します:
npm install yup
次に、バリデーションスキーマを定義します。例えば、フォームにおいてフィールドAの値が特定の条件を満たす場合に、フィールドBを必須にするという場合を考えてみましょう。
import * as yup from 'yup';
const schema = yup.object().shape({
fieldA: yup.string().required(),
fieldB: yup.string().when('fieldA', {
is: (value) => value && value.length > 0, // 特定の条件をここに定義
then: yup.string().required('フィールドBは必須です。'), // フィールドBを必須にする
otherwise: yup.string()
})
});
上記の例では、fieldA
が存在し、かつ値の長さが0より大きい場合に、fieldB
が必須になります。required
メソッドの引数には、必須エラーメッセージを指定することもできます。
最後に、バリデーションを実行するために、フォームの送信時にschema.validate()
メソッドを呼び出します。
const handleSubmit = async (values) => {
try {
await schema.validate(values);
// バリデーションが成功した場合の処理
} catch (error) {
// バリデーションエラーが発生した場合の処理
}
};
これで、Yupを使用してReactで条件付きでフィールドを必須にする方法を学びました。バリデーションスキーマを定義し、条件に応じてフィールドの必須ルールを追加することで、柔軟なフォームバリデーションを実現することができます。