カテゴリ: React 更新日: 2026/02/24

ReactのuseEffectでフォーム送信の非同期処理を行う方法を初心者向けに解説

useEffectでフォーム送信の非同期処理を行う例
useEffectでフォーム送信の非同期処理を行う例

先生と生徒の会話形式で理解しよう

生徒

「先生、Reactでフォームを作ったんですが、入力した内容をサーバーに送信する方法がよくわかりません。送信ボタンを押したら非同期処理でデータを送るってできますか?」

先生

「もちろんできますよ。ReactではuseEffectを使うことで、フォーム送信後に非同期処理を安全に扱うことができます。」

生徒

「フォーム送信とuseEffectを組み合わせるイメージがまだ湧きません。どういうふうに書けばいいんですか?」

先生

「それでは、順番にフォーム送信の非同期処理を実装する方法を見ていきましょう。」

1. フォーム送信の基本と非同期処理

1. フォーム送信の基本と非同期処理
1. フォーム送信の基本と非同期処理

フォーム送信とは、ユーザーが入力した内容をサーバーに送ることを指します。通常はHTMLの<form>タグを使いますが、ReactではJavaScriptの関数を使って制御することが一般的です。特にサーバーと通信する部分は「非同期処理」と呼ばれ、結果が返ってくるまでに時間がかかるため、待つ仕組みを入れる必要があります。

例えば、通販サイトで注文ボタンを押したときに「注文を送信中です」と表示され、少し待ってから「注文が完了しました」と画面に出ることがあります。これも非同期処理の一種です。

2. useEffectを使う理由

2. useEffectを使う理由
2. useEffectを使う理由

useEffectは、Reactのコンポーネントで「特定の状態が変わったときに処理を実行する」ための仕組みです。フォーム送信の場面では「送信ボタンが押された」という状態をフラグにして、その変化をトリガーに非同期処理を実行できます。

つまり、useEffectを使うことで「ユーザーが送信したらAPI通信を開始する」といった動きを自然に書くことができるのです。

3. フォーム送信の非同期処理を実装する例

3. フォーム送信の非同期処理を実装する例
3. フォーム送信の非同期処理を実装する例

以下は、ユーザーが名前を入力して送信するとサーバーにデータを送るサンプルコードです。


import React, { useState, useEffect } from "react";

function App() {
  const [name, setName] = useState("");
  const [submittedName, setSubmittedName] = useState(null);
  const [message, setMessage] = useState("");

  useEffect(() => {
    if (submittedName) {
      const sendData = async () => {
        try {
          const res = await fetch("https://example.com/api", {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({ name: submittedName }),
          });
          if (!res.ok) throw new Error("送信エラー");
          setMessage("送信が完了しました!");
        } catch (error) {
          setMessage("送信に失敗しました。もう一度お試しください。");
        }
      };
      sendData();
    }
  }, [submittedName]);

  const handleSubmit = (e) => {
    e.preventDefault();
    setSubmittedName(name);
  };

  return (
    <div>
      <h1>フォーム送信の例</h1>
      <form onSubmit={handleSubmit}>
        <input
          type="text"
          value={name}
          onChange={(e) => setName(e.target.value)}
          placeholder="名前を入力してください"
        />
        <button type="submit">送信</button>
      </form>
      <p>{message}</p>
    </div>
  );
}

export default App;
(フォームに名前を入力して送信ボタンを押すと、サーバーにデータが送信され、結果が画面に表示されます)

4. エラーメッセージとユーザー体験

4. エラーメッセージとユーザー体験
4. エラーメッセージとユーザー体験

フォーム送信では、成功する場合もあれば失敗する場合もあります。通信エラーや入力エラーがあった場合、ユーザーに何が起こったかを知らせることが大切です。上のコードではsetMessageを使って「送信に失敗しました」というメッセージを表示しています。これによって、ユーザーはただ画面が固まっているのではなく「エラーが発生した」と理解できます。

5. 初心者が覚えるべきポイント

5. 初心者が覚えるべきポイント
5. 初心者が覚えるべきポイント
  • フォーム送信はユーザーの入力をサーバーに渡す仕組み
  • 非同期処理は時間がかかるため待つ仕組み(async/await)が必要
  • useEffectは「状態が変わったら実行する」場所として活用できる
  • エラー処理を必ず入れてユーザーにフィードバックを返す

これらを理解すれば、Reactでフォーム送信を扱うときに困らなくなります。小さなアプリから練習して、少しずつ複雑な入力フォームにも応用してみましょう。

カテゴリの一覧へ
新着記事
New1
React
Reactで再利用可能なリスト表示コンポーネントを実装しよう!初心者でもわかるReactのコンポーネント分割
New2
React
ReactのPropsとStateのベストプラクティスを整理しよう!初心者でもわかる使い方ガイド
New3
Next.js
Next.jsのRoute Groupの使い方を完全ガイド!App Routerでフォルダ構成を整理する方法
New4
Next.js
Next.js App Routerのtemplate.tsxの役割を完全解説!初心者でも理解できるレイアウト管理の基本
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.3
Java&Spring記事人気No3
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.4
Java&Spring記事人気No4
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.5
Java&Spring記事人気No5
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.6
Java&Spring記事人気No6
React
ReactでAxiosローディング状態を管理する方法を完全ガイド!初心者でもわかる非同期通信の基本
No.7
Java&Spring記事人気No7
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
React
ReactでuseStateを使ったオブジェクト・配列の扱い方完全ガイド!初心者でもわかるReactフック