カテゴリ: 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
Next.js
Next.jsのgetStaticProps / getServerSidePropsを完全ガイド!初心者でもわかるNext.js Pages Routerのデータ取得
New2
Next.js
Next.jsのApp RouterとPages Routerの役割の違いを完全解説!初心者でもわかるNext.jsの基本概念
New3
React
Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New4
React
Reactで複数のフォーム入力をまとめて管理する方法!初心者でもわかるState活用入門
人気記事
No.1
Java&Spring記事人気No1
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかるReact入門
No.2
Java&Spring記事人気No2
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.3
Java&Spring記事人気No3
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.4
Java&Spring記事人気No4
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.5
Java&Spring記事人気No5
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.6
Java&Spring記事人気No6
React
Reactのチェックボックス入力を完全解説!初心者でもわかるReactフォーム処理
No.7
Java&Spring記事人気No7
Next.js
Next.jsのApp RouterとPages Routerの役割の違いを完全解説!初心者でもわかるNext.jsの基本概念
No.8
Java&Spring記事人気No8
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック