Formikと組み合わせる
最後に、Formikと組み合わせるための方法を確認しておきましょう。前回Formikで作成した申し込みフォームのプロジェクトに、npmでYupをインストールします(リスト13)。
$ npm install yup --save
次に、Yupでスキーマを作成して、Formikに設定します(リスト14)。
import * as yup from 'yup'; function App() { // (1) const validationSchema = yup.object().shape({ email: yup.string() .email('Eメールアドレスの形式が不正です') .required('Eメールアドレスを入力してください') }); const formik = useFormik({ initialValues: { email: '', }, validationSchema: validationSchema, // (2) onSubmit: (values, { setSubmitting }) => { postData(values) .then(() => { alert('送信完了しました\n' + JSON.stringify(values, null, 2)); setSubmitting(false); }); }, });
(1)でyup.object()
をベースにしてスキーマを定義しています。入力欄としてemail
があるので、チェック内容もyup.string().email().required()
にしました。これで、必須チェックだけではなく、メールアドレスとしての形式チェックも簡単に導入できました。スキーマが出来上がったら、(2)のように、FormikのvalidationSchema
プロパティにスキーマを設定します。validate
プロパティは削除して構いません。これだけでFormikとYupのつなぎ込みは完了です。
それでは動作確認です。まずは、メールアドレスではない値を入力してみましょう(図2)。
前回なら入力値ありで通ってしまっていたバリデーションでしたが、今回はメールアドレスの形式チェックが入ったので、エラー扱いになりました。今度は正しい形式のメールアドレスにしてみましょう(図3)。
エラーメッセージが消えました。Yupはちゃんと動いているようです。
まとめ
フォームの各項目の特性を宣言的に定義するだけで、バリデーションルールの実装ができるようになりました。FormikやYupを駆使して、堅牢なフォームを作っていきましょう。さて、次回はReactに特化した通信ライブラリとして、SWRについて解説します。お楽しみに。