カテゴリ: 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
React
Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New2
React
PropsとStateの違いを徹底解説!使い分けのポイントまとめ
New3
React
Reactのフォーム入力を再利用しよう!初心者でもわかるフィールドコンポーネント化の考え方
New4
React
Reactでできること一覧!初心者でもわかるWebアプリ・スマホアプリ・PWAの活用方法
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.3
Java&Spring記事人気No3
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.4
Java&Spring記事人気No4
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.5
Java&Spring記事人気No5
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.6
Java&Spring記事人気No6
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.7
Java&Spring記事人気No7
React
Reactのカードコンポーネントを汎用的に設計する方法!初心者でもわかる再利用の考え方
No.8
Java&Spring記事人気No8
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!