📚

Reactにおけるフォーム送信のハンドリングとページ再読み込みの防止

2024/03/15に公開

ウェブアプリケーションでは、フォーム送信は基本的なユーザーインタラクションの一つです。従来のフォーム送信プロセスがページの再読み込みを引き起こすことは、特にシングルページアプリケーション(SPA)では望ましくありません。

本記事では、Reactでフォーム送信イベントをハンドルし、不要なページ再読み込みを防止する方法、そしてReact Hook Formを使用した実装方法について説明します。

関数コンポーネントによる実装

関数コンポーネントを使用してフォーム送信イベントをハンドルし、デフォルトの送信アクションをキャンセルする基本的な方法は以下の通りです。

import React from 'react';

function MyForm() {
  const handleSubmit = (event) => {
    event.preventDefault(); // ページの再読み込みを防止
    // ここにフォーム送信時のカスタム処理を記述
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="username" />
      <button type="submit">送信</button>
    </form>
  );
}

export default MyForm;

このコードでは、フォームの送信ボタンが押された際にhandleSubmit関数がトリガーされ、event.preventDefault()を呼び出してページの再読み込みを防止します。

React Hook Formを使用した実装

React Hook Formは、フォームのバリデーションや送信処理を簡単にするためのライブラリです。

React Hook Formを使用したフォームの送信処理は、以下のようになります。

import React from 'react';
import { useForm } from 'react-hook-form';

function MyForm() {
  const { register, handleSubmit } = useForm();

  const onSubmit = data => {
    console.log(data); // フォームのデータを処理
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input name="username" ref={register} />
      <button type="submit">送信</button>
    </form>
  );
}

export default MyForm;

この例では、useFormフックから得られるhandleSubmitをフォームのonSubmitプロパティに渡しています。

handleSubmitは、フォーム送信イベントをハンドルし、内部でevent.preventDefault()を呼び出してページの再読み込みを防ぎます。

さらに、バリデーションが成功した場合にのみonSubmitコールバックを実行します。

まとめ

event.preventDefault()を適切に活用することで、Reactアプリケーションにおけるフォーム送信時のページ再読み込みを効果的に防止できます。

React Hook Formを使用すると、フォームのバリデーションと送信処理が簡単かつ効率的になり、開発者はフォームの送信ロジックにより集中できるようになります。

これらの方法は、シングルページアプリケーションのユーザーエクスペリエンスを向上させるのに貢献します。

Discussion