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

Reactの入力フォームをStateで管理する方法を完全ガイド!初心者でもわかる制御されたコンポーネント

入力フォームをStateで管理する方法(制御されたコンポーネント)
入力フォームをStateで管理する方法(制御されたコンポーネント)

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

生徒

「Reactで文字を入力するフォームを作ったんですが、値の扱い方がよく分かりません…」

先生

「Reactでは入力フォームをStateで管理する考え方が基本になります。」

生徒

「Stateで管理するって、どういう意味ですか?」

先生

「入力された内容をReactに覚えさせる方法です。順番に説明しますね。」

1. 入力フォームをStateで管理するとは

1. 入力フォームをStateで管理するとは
1. 入力フォームをStateで管理するとは

Reactで入力フォームをStateで管理するとは、入力された文字や数字を、 Reactの状態として保存し、画面表示もその状態に合わせて動かすことです。 これを制御されたコンポーネントと呼びます。

制御とは「コントロールする」という意味です。 入力欄をHTML任せにせず、Reactが責任を持って管理するイメージです。 ノートにメモを書いておくように、Reactの中に入力内容を保存します。

2. なぜ制御されたコンポーネントが必要なのか

2. なぜ制御されたコンポーネントが必要なのか
2. なぜ制御されたコンポーネントが必要なのか

入力内容をReactが管理すると、今どんな文字が入っているのかを プログラムの中からいつでも確認できます。 ボタンを押したときの処理や、画面の表示切り替えが簡単になります。

例えるなら、先生が出席表を手元に持っている状態です。 生徒の名前をすぐ確認できるので、呼び出しや確認が楽になります。

3. useStateを使った最も基本的な入力フォーム

3. useStateを使った最も基本的な入力フォーム
3. useStateを使った最も基本的な入力フォーム

ReactではuseStateという仕組みを使ってStateを作ります。 useStateは「覚えておく箱」を用意するものだと考えてください。


import React, { useState } from "react";

function App() {
  const [text, setText] = useState("");

  return (
    <div>
      <input
        type="text"
        value={text}
        onChange={(e) => setText(e.target.value)}
      />
      <p>入力内容:{text}</p>
    </div>
  );
}

export default App;
(文字を入力すると、その内容がそのまま画面に表示されます)

4. valueとonChangeの役割を理解しよう

4. valueとonChangeの役割を理解しよう
4. valueとonChangeの役割を理解しよう

valueは「今表示する値」を指定します。 onChangeは「入力が変わった瞬間」に動く処理です。 この2つをセットで使うことで、入力フォームを完全にReactが管理します。

ラジオの音量つまみを想像してください。 つまみを回すと音量が変わり、その状態を機械が覚えます。 onChangeが回す動作で、valueが今の音量です。

5. ボタンと組み合わせた制御されたフォーム

5. ボタンと組み合わせた制御されたフォーム
5. ボタンと組み合わせた制御されたフォーム

入力した内容を、ボタンを押したタイミングで使う場面はとても多いです。 Stateで管理していれば、簡単にその値を使えます。


import React, { useState } from "react";

function App() {
  const [name, setName] = useState("");

  const handleClick = () => {
    alert("あなたの名前は「" + name + "」です");
  };

  return (
    <div>
      <input
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
      <button onClick={handleClick}>確認</button>
    </div>
  );
}

export default App;
(ボタンを押すと、入力した名前が表示されます)

6. 複数の入力欄をStateで管理する方法

6. 複数の入力欄をStateで管理する方法
6. 複数の入力欄をStateで管理する方法

実際のフォームでは、名前やメールアドレスなど複数の入力欄があります。 Reactでは、それぞれを別のStateとして管理します。


import React, { useState } from "react";

function App() {
  const [email, setEmail] = useState("");
  const [age, setAge] = useState("");

  return (
    <div>
      <input
        placeholder="メールアドレス"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
      />
      <input
        placeholder="年齢"
        value={age}
        onChange={(e) => setAge(e.target.value)}
      />
      <p>{email} / {age}</p>
    </div>
  );
}

export default App;
(それぞれの入力内容がReactに別々に保存されます)

7. 初心者がつまずきやすいポイント

7. 初心者がつまずきやすいポイント
7. 初心者がつまずきやすいポイント

入力できない、文字が消えるといった問題は、 valueだけ書いてonChangeを書いていない場合によく起こります。 Reactでは必ず両方を書くことが基本です。

制御されたコンポーネントは少し難しく感じますが、 「入力内容をReactに預ける」という意識を持つと理解しやすくなります。 慣れるとフォーム処理がとても楽になります。

カテゴリの一覧へ
新着記事
New1
Next.js
Next.jsの「use client」の書き方を完全ガイド!初心者でもわかるClient Componentsの使いどころ
New2
React
Reactのライフサイクルでよくあるバグとデバッグ方法を初心者向けに解説
New3
React
TypeScript対応Reactプロジェクトの作成方法を完全ガイド!初心者でもわかるReactとTypeScriptの基本
New4
React
Reactの入力フォームをStateで管理する方法を完全ガイド!初心者でもわかる制御されたコンポーネント
人気記事
No.1
Java&Spring記事人気No1
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.4
Java&Spring記事人気No4
Next.js
Next.jsのappディレクトリの役割を完全解説!初心者でもわかるApp Router入門
No.5
Java&Spring記事人気No5
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかるReact入門
No.6
Java&Spring記事人気No6
React
Reactの環境構築とは?初心者でもできるセットアップ手順まとめ
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
useEffectでクリーンアップ関数を使う方法をやさしく解説