- フォームのバリデーションスキーマを定義する方法: Formikでは、バリデーションスキーマを使用してフォームのバリデーションを行うことができます。まず、YupやJoiなどのバリデーションライブラリを使用して、バリデーションスキーマを定義します。例えば、以下のようなスキーマを考えてみましょう:
import * as Yup from 'yup';
const validationSchema = Yup.object().shape({
username: Yup.string().required('ユーザー名は必須です'),
password: Yup.string().required('パスワードは必須です'),
});
この例では、username
とpassword
が必須フィールドであることを定義しています。
- フォーム内のフィールドごとにバリデーションを設定する方法:
Formikを使用してフォームを構築する際に、各フィールドにバリデーションルールを設定することもできます。例えば、以下のように
Field
コンポーネントを使用してフィールドを作成します:
import { Field, ErrorMessage } from 'formik';
// ...
<Field name="username" type="text" />
<ErrorMessage name="username" component="div" />
<Field name="password" type="password" />
<ErrorMessage name="password" component="div" />
- ボタンの無効化状態を管理する方法:
ボタンの無効化状態は、Formikの
isValid
プロパティを使用して管理することができます。isValid
はフォーム内の全フィールドがバリデーションに合格している場合にtrue
となります。したがって、ボタンを無効化するには、isValid
を使用して条件式を作成します。例えば、以下のようになります:
import { Formik, Field, ErrorMessage } from 'formik';
// ...
<Formik
initialValues={{ username: '', password: '' }}
validationSchema={validationSchema}
onSubmit={handleSubmit}
>
{({ isValid }) => (
<form>
<Field name="username" type="text" />
<ErrorMessage name="username" component="div" />
<Field name="password" type="password" />
<ErrorMessage name="password" component="div" />
<button type="submit" disabled={!isValid}>
送信
</button>
</form>
)}
</Formik>
上記の例では、isValid
を使用してボタンのdisabled
プロパティを制御しています。フォーム内のフィールドがバリデーションに合格していない場合、isValid
はfalse
となり、ボタンは無効化されます。
これらの方法を使用することで、Formikを介して必須フィールドが無効な場合にボタンを無効化することができます。