フォームの入力バリデーションとネストされたオブジェクトの扱い方:FormikとYupの活用方法


まず、Formikを使用してフォームを作成します。Formikは、Reactアプリケーションでフォームの状態と操作を管理するためのライブラリです。以下は、Formikを使用してフォームを作成する例です。

import { Formik, Field, Form, ErrorMessage } from 'formik';
const MyForm = () => {
  return (
    <Formik
      initialValues={{ nestedObj: { key1: '', key2: '' } }}
      onSubmit={values => {
        // フォームの送信処理
      }}
    >
      <Form>
        <Field type="text" name="nestedObj.key1" />
        <ErrorMessage name="nestedObj.key1" component="div" />
        <Field type="text" name="nestedObj.key2" />
        <ErrorMessage name="nestedObj.key2" component="div" />
        <button type="submit">送信</button>
      </Form>
    </Formik>
  );
};
export default MyForm;

次に、Yupを使用してフォームのバリデーションスキーマを定義します。Yupは、スキーマベースのバリデーションライブラリであり、フォームの入力値を検証するために使用されます。以下は、Yupを使用してフォームのバリデーションスキーマを定義する例です。

import * as Yup from 'yup';
const validationSchema = Yup.object({
  nestedObj: Yup.object({
    key1: Yup.string().required('key1は必須です'),
    key2: Yup.string().required('key2は必須です'),
  }),
});
export default validationSchema;

最後に、FormikとYupを組み合わせてフォームバリデーションを実行します。以下は、FormikとYupを組み合わせたコードの例です。

import { Formik, Field, Form, ErrorMessage } from 'formik';
import validationSchema from './validationSchema';
const MyForm = () => {
  return (
    <Formik
      initialValues={{ nestedObj: { key1: '', key2: '' } }}
      validationSchema={validationSchema}
      onSubmit={values => {
        // フォームの送信処理
      }}
    >
      <Form>
        <Field type="text" name="nestedObj.key1" />
        <ErrorMessage name="nestedObj.key1" component="div" />
        <Field type="text" name="nestedObj.key2" />
        <ErrorMessage name="nestedObj.key2" component="div" />
        <button type="submit">送信</button>
      </Form>
    </Formik>
  );
};
export default MyForm;

上記の例では、FormikとYupを使用してネストされたオブジェクトを含むフォームのバリデーションを行っています。Formikはフォームの状態と操作を管理し、Yupはフォームのバリデーションスキーマを定義します。これにより、ユーザーがフォームに正しいデータを入力するかどうかを簡単に検証することができます。例では、nestedObjという名前のネストされたオブジェクト内の2つのキー(key1key2)をバリデーションしていますが、必要に応じて他のキーを追加することもできます。

このように、FormikとYupを組み合わせることで、Reactアプリケーションでフォームの入力バリデーションを効果的に実装することができます。これにより、ユーザーが正しいデータを提供することができるようになり、アプリケーションの品質と使いやすさを向上させることができます。