第6回:useStateをマスター!Reactで画面を動的に書き換える「状態」の基本

lang

前回:Props(プロップス)の使い方:コンポーネント間でデータを受け渡す方法では、親から子へデータを渡す「一方向の通信」を学びました。

しかし、Propsは「読み取り専用」のデータでしたね。アプリを作っていると、**「ユーザーの操作によって、その場で値が変わるデータ」**が必要になります。例えば、いいねの数、入力中のテキスト、開閉するメニューなどです。

これらを実現するのが、Reactで最も重要な機能の一つ、useState(ステート) です。


1. 「State(状態)」とは何か?

Reactにおける「State(状態)」とは、**「そのコンポーネントが保持する、変化するデータ」**のことです。

普通のJavaScript変数(let x = 0 など)との最大の違いは、**「値が変わった瞬間に、Reactが自動で画面を書き換えてくれる(再描画する)」**という点にあります。

普通の変数だと、値を書き換えても画面は古いままですが、Stateを使えば、データと見た目が常に同期します。


2. useState の書き方:3つの要素

第1回の最小サンプルでも登場しましたが、改めてその構造を分解してみましょう。

JavaScript

const [count, setCount] = useState(0);
  1. count(現在の値): 今、データがどうなっているかを参照するための変数。
  2. setCount(更新用関数): データを書き換えるための専用の関数。「これを使って書き換えてね!」というReactとの約束事です。
  3. useState(0)(初期値): 最初に画面が開いた時の値をカッコの中に書きます。

3. 【実践】ON/OFFを切り替えるスイッチを作ろう

今回は、クリックするたびに「ON」と「OFF」が切り替わるシンプルなボタンを作ります。 第2回の環境で作成した App.jsx を書き換えてみましょう。

App.jsx(最小構成版)

JavaScript

import React, { useState } from 'react';

export default function App() {
  // 1. 状態の定義:初期値は「false(OFFの状態)」
  const [isOn, setIsOn] = useState(false);

  return (
    <div style={{ textAlign: 'center', marginTop: '50px' }}>
      <h1>useState スイッチ</h1>
      
      {/* 2. 状態(isOn)によって表示する文字を切り替える */}
      {/* 三項演算子:isOnがtrueなら "ON"、falseなら "OFF" */}
      <h2>今の状態は:{isOn ? "🚀 ON" : "💤 OFF"}</h2>

      {/* 3. クリック時に状態を「反対」にする */}
      {/* !isOn は「今の反対(trueならfalse)」という意味 */}
      <button onClick={() => setIsOn(!isOn)}>
        スイッチを切り替える
      </button>

      <p>※ボタンを押すと、Reactが自動で書き換えます。</p>
    </div>
  );
}

CodeSandboxでuseStateの動きを確認する


4. コードの解説(JavaScript & React)

JavaScriptのポイント

  • 分割代入: const [a, b] = useState() という書き方は、関数の戻り値(配列)をバラバラにして受け取るJavaScriptの便利な記法です。
  • 三項演算子 (条件 ? A : B): {isOn ? "ON" : "OFF"} は、「もし isOn が正しければ “ON”、そうでなければ “OFF” を出す」という短いif文のようなものです。
  • 否定演算子 (!): !isOn は、truefalse に、falsetrue にひっくり返します。

Reactのポイント

  • インラインでの更新: onClick={() => setIsOn(!isOn)} のように、イベントの中で直接更新関数を呼ぶのが最もシンプルな書き方です。
  • なぜ setIsOn が必要なのか?: 直接 isOn = true と書いても、Reactは「データが変わったこと」に気づけません。専用の関数を通すことで、初めてReactに「画面を更新して!」という通知が届くのです。

5. 2026年の学び:Stateを制する者はReactを制す

2026年現在、Reactには多くの高度な機能がありますが、すべての基本はこの useState に集約されます。

  • フォームの入力第2回サンプルで紹介したもの)
  • APIから取得したデータの保存
  • モーダルウィンドウの開閉

これらはすべて、裏側で useState が動いています。まずは「値を出す変数」と「値を更新する関数」のペアをセットで覚えることが、脱・初心者への最短ルートです。


今回のまとめ

  1. State(状態) は、コンポーネントが覚えている「変化するデータ」。
  2. useState を使うと、データと画面が連動する。
  3. 更新用関数(set…)を使わないと、画面は書き換わらない。
  4. 三項演算子否定演算子 と組み合わせると、表現の幅が広がる。

次回予告:クリック以外の反応をマスター

これまでは「ボタンを押す」「文字を打つ」といった、ユーザーの直接的な操作に反応してきました。 では、「画面が開いた瞬間にデータを読み込む」とか「タイマーで1秒ごとに数字を増やす」といった、操作とは関係ない動きはどう作るのでしょうか?

次回、「第7回:クリックや入力に反応する!Reactのイベントハンドリング基礎」。 (※リスト順ではイベント基礎ですが、さらに踏み込んで、より複雑なユーザー操作をスマートに処理するコツを伝授します!)

お楽しみに!


本日の宿題: サンプルコードの useState(false)useState(true) に変えたら、最初に開いた時の表示はどう変わりますか? 実際に試して、初期値の影響を確認してみましょう!

コメント

タイトルとURLをコピーしました