1
0

More than 1 year has passed since last update.

React Hook Formを使ってバリデーションエラー時にページ上部に移動する

Posted at

フォームのバリデーションエラーは、ユーザーエクスペリエンスにとって重要な要素です。ユーザーがフォームを送信しようとしたときに、何か問題があるとすぐに通知することで、問題を速やかに修正することができます。しかし、長いフォームではバリデーションエラーメッセージが見落とされることもあります。特に、エラーメッセージがページの上部にあると、ユーザーがスクロールせずには見られません。

そこで、この記事ではReact Hook FormとYupを使用して、バリデーションエラーが発生したときにページの上部に自動的にスクロールする方法を紹介します。この実装はカスタムフック内で行われ、フォームがこの挙動を共有するために再利用可能です。

なぜそれが必要なのか?

長いフォームでは、エラーメッセージがすぐには見えない可能性があります。特に、ページの下部で「送信」ボタンを押した後、エラーメッセージがページの上部にあると、ユーザーは何が問題なのかわからないかもしれません。この問題を解決するために、バリデーションエラーが発生したときにページの上部に自動的にスクロールすると、ユーザーはすぐにエラーメッセージを見つけることができます。

実装方法

React Hook FormのuseFormフックは、handleSubmit関数の第二引数としてエラーハンドラを提供します。これを使用して、バリデーションエラーが発生したときにページの上部に自動的にスクロールすることができます。

以下にその方法を示します。

// useCustomForm.ts
const {
  register,
  handleSubmit,
  formState: { errors },
} = useForm<FormData>({
  resolver: yupResolver(schema),
  defaultValues: {
    // ここにデフォルト値を設定
  },
});

const onSubmit = (data: FormData) => {
  // ...
};

const onError = () => {
  window.scrollTo(0, 0); // エラーが発生したらページの最上部へスクロール
};

return {
  register,
  errors,
  handleSubmit: handleSubmit(onSubmit, onError), // handleSubmit関数にエラーハンドラとしてonError関数を渡す
  // ...
};

上記のように、handleSubmit関数にエラーハンドラとしてonError関数を渡すことで、バリデーションエラーが発生した際に自動的にページの最上部へスクロールするようにすることができます。このロジックをカスタムフック内に包んで、フォーム全体で再利用することができます。

結論

React Hook FormとYupを使ってバリデーションエラーが発生した時にページ上部に移動する方法をご紹介しました。これにより、ユーザーエクスペリエンスを向上させ、ユーザーがエラー情報を見逃す可能性を減らすことができます。さらに、このロジックはカスタムフック内に包むことで、複数のフォームで再利用可能となります。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0