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

Reactで複数のフォーム入力をまとめて管理する方法!初心者でもわかるState活用入門

複数のフォーム入力を1つのStateで管理する方法
複数のフォーム入力を1つのStateで管理する方法

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

生徒

「Reactで名前やメールアドレスなど、たくさん入力欄があるときは全部別々に管理するんですか?」

先生

「実は、複数の入力欄を一つのStateでまとめて管理する方法があります。」

生徒

「一つの箱で全部管理できるんですか?」

先生

「はい。申込書を一冊のファイルにまとめるような感覚で扱えます。順番に見ていきましょう。」

1. フォーム入力が増えると何が大変か

1. フォーム入力が増えると何が大変か
1. フォーム入力が増えると何が大変か

フォームとは、名前やメールアドレス、年齢などを入力する画面のことです。 入力欄が一つだけなら管理は簡単ですが、 入力欄が増えるたびにStateを増やすと、コードが長くなり見づらくなります。 まるで、メモ帳が何冊も机に散らばっているような状態です。 そこで、複数の入力を一つにまとめる考え方が役立ちます。

2. 1つのStateでまとめて管理する考え方

2. 1つのStateでまとめて管理する考え方
2. 1つのStateでまとめて管理する考え方

複数の入力を一つのStateで管理するときは、 オブジェクトという仕組みを使います。 オブジェクトとは、名前と内容をセットで管理できる箱の集まりです。 「名前はこれ」「メールはこれ」というように、 一冊のノートに項目ごとに書くイメージです。

3. 最もシンプルな基本例

3. 最もシンプルな基本例
3. 最もシンプルな基本例

まずは、名前とメールアドレスを一つのStateで管理する例を見てみましょう。 最初に空の入力欄を用意し、入力された内容をまとめて保存します。


import React, { useState } from "react";

function App() {
  const [form, setForm] = useState({
    name: "",
    email: ""
  });

  return (
    <div>
      <input
        type="text"
        placeholder="名前"
        onChange={(e) => setForm({ ...form, name: e.target.value })}
      />
      <input
        type="email"
        placeholder="メール"
        onChange={(e) => setForm({ ...form, email: e.target.value })}
      />
    </div>
  );
}

export default App;
(名前とメールアドレスを入力できます)

4. spread構文の意味をやさしく理解する

4. spread構文の意味をやさしく理解する
4. spread構文の意味をやさしく理解する

コードに出てくる三つの点は、spread構文と呼ばれます。 これは「今ある内容を一度全部コピーする」という意味です。 申込書に新しい項目を書き足すとき、 すでに書いた内容を消さずに追加するのと同じです。 これを使わないと、他の入力内容が消えてしまうので注意が必要です。

5. 入力欄が増えた場合の管理方法

5. 入力欄が増えた場合の管理方法
5. 入力欄が増えた場合の管理方法

入力欄が増えても、同じStateに項目を追加するだけで対応できます。 電話番号や年齢などを追加しても、 管理する箱は一つのままです。


import React, { useState } from "react";

function App() {
  const [form, setForm] = useState({
    name: "",
    email: "",
    age: ""
  });

  return (
    <div>
      <input
        type="text"
        placeholder="名前"
        onChange={(e) => setForm({ ...form, name: e.target.value })}
      />
      <input
        type="email"
        placeholder="メール"
        onChange={(e) => setForm({ ...form, email: e.target.value })}
      />
      <input
        type="number"
        placeholder="年齢"
        onChange={(e) => setForm({ ...form, age: e.target.value })}
      />
    </div>
  );
}

export default App;
(複数の入力欄を一つのStateで管理できます)

6. name属性を使ってコードを短くする

6. name属性を使ってコードを短くする
6. name属性を使ってコードを短くする

入力欄が多くなると、同じような処理を何度も書くことになります。 そこで、name属性を使う方法があります。 これは、入力欄に名前札を付けて、 どの項目が変更されたかを自動で判断する仕組みです。


import React, { useState } from "react";

function App() {
  const [form, setForm] = useState({
    name: "",
    email: "",
    age: ""
  });

  const handleChange = (e) => {
    setForm({ ...form, [e.target.name]: e.target.value });
  };

  return (
    <div>
      <input name="name" placeholder="名前" onChange={handleChange} />
      <input name="email" placeholder="メール" onChange={handleChange} />
      <input name="age" placeholder="年齢" onChange={handleChange} />
    </div>
  );
}

export default App;
(一つの処理で全ての入力を管理できます)

7. 初心者がつまずきやすい注意点

7. 初心者がつまずきやすい注意点
7. 初心者がつまずきやすい注意点

よくある失敗は、Stateの中身を直接書き換えてしまうことです。 Reactでは、新しい内容を作って入れ替える必要があります。 また、spread構文を忘れると、 他の入力内容が消えてしまう原因になります。 「一つのStateでまとめるときは、必ず全体をコピーする」 という意識を持つと安心です。

8. 複数管理のメリット

8. 複数管理のメリット
8. 複数管理のメリット

複数のフォーム入力を一つのStateで管理すると、 コードが整理され、後から見ても分かりやすくなります。 入力内容をまとめて送信したり確認したりするのも簡単です。 これは、書類を一つのファイルにまとめて保管するのと同じで、 実際の開発でもよく使われる方法です。

カテゴリの一覧へ
新着記事
New1
React
React Context APIのパフォーマンス最適化を徹底解説!useMemoで無駄な描画を防ぐ方法
New2
React
ReactのProps必須・オプショナル指定を完全解説!初心者でもわかる型安全なProps管理
New3
React
Reactでデフォルト動作を止める!preventDefaultの使い方を初心者向けに解説
New4
Next.js
Next.js ISR(Incremental Static Regeneration)が必要になるケースを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
React
Reactの子コンポーネントから親コンポーネントへデータを渡す方法を徹底解説!初心者にもわかるReactのイベントとデータの流れ
No.2
Java&Spring記事人気No2
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.3
Java&Spring記事人気No3
React
React開発におすすめのVSCode拡張機能まとめ!初心者でもすぐ使える便利ツール紹介
No.4
Java&Spring記事人気No4
React
ReactのContext APIとReduxの違いを初心者向けに徹底比較!どちらを使うべきか完全解説
No.5
Java&Spring記事人気No5
React
ReactのState管理ベストプラクティス!初心者でもわかる再レンダリング最適化の考え方
No.6
Java&Spring記事人気No6
React
React(TypeScript)で学ぶStateの型推論と型指定の違い!型安全なState管理を初心者向けにやさしく解説
No.7
Java&Spring記事人気No7
Next.js
Next.jsのServer ComponentsとClient Componentsの通信方法を完全解説!props渡しの基本と使い方
No.8
Java&Spring記事人気No8
Next.js
Next.jsのSSR(Server Side Rendering)入門!Pages Routerとの違いを初心者向けに解説