0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React入門】useStateの使い方を丁寧に解説!初心者でもわかる状態管理の基本

Last updated at Posted at 2025-10-17

🧭 はじめに

Reactを学び始めると、最初にぶつかる壁が「状態(State)」の扱い方ではないでしょうか?
その中でも最もよく使われるフックが useState です。

「ボタンを押したら数が増える」

「入力内容をリアルタイムに表示したい」

そんな“動きのあるUI”を作るには、useStateが欠かせません。

この記事では、React初心者でも理解できるようにuseStateの基本的な使い方と注意点を、サンプルコード付きで丁寧に解説します。

⚙️ 前提条件

この記事で想定している環境は以下の通りです👇

  • Node.js がインストール済み
  • React プロジェクトが作成済み(例:Vite や Create React App)
  • JavaScript(ES6)の基本がわかる

もしまだReactプロジェクトを作っていない場合は、Viteを使ってすぐに始められます。

Vite + React プロジェクト作成

bash
npm create vite@latest my-react-app -- --template react

cd my-react-app
npm install
npm run dev

🎯 今回の目標

この記事で目指すのは以下の2つです👇

  • カウンターアプリ:クリックで数値が増える
  • 入力フォーム:入力内容をリアルタイムで反映する

この2つを通して、useStateの使い方と仕組みを理解していきましょう!

🧠 useStateとは?

useStateは、Reactが提供する 状態管理のためのフック(Hook) です。

コンポーネントの中で「変化する値」を管理し、それに応じてUIを自動で更新してくれます。

✅ 基本構文

const [state, setState] = useState(initialValue);
  • state:現在の状態(値)
  • setState:状態を更新するための関数
  • initialValue:初期値

たとえば、「カウント数」を管理したい場合は次のように書きます。

const [count, setCount] = useState(0);

🧮 サンプル①:カウンターアプリ

まずは定番の「+1ボタンでカウントアップ」するアプリです👇

App.jsx
import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    setCount(count + 1);
  };

  return (
    <div style={{ textAlign: "center" }}>
      <h2>カウント:{count}</h2>
      <button onClick={handleClick}>+1</button>
    </div>
  );
}

export default Counter;
📝 解説
  • useState(0) → 初期値を「0」に設定
  • setCount(count + 1) → 現在の値に1を足して更新

状態が変化すると、Reactが自動的に再レンダーし画面を更新します

⚠️ 注意

直接代入しても状態は更新されません!

count = count + 1; // ❌ 画面は変わらない
setCount(count + 1); // ✅ 正しい書き方

状態を更新するときは、必ず setCount() のようにセッター関数を使いましょう。

✍️ サンプル②:入力フォーム(双方向データバインディング)

次に、入力した文字がリアルタイムで画面に反映される例です👇

App.jsx
import { useState } from "react";

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

  const handleChange = (e) => {
    setText(e.target.value);
  };

  return (
    <div style={{ textAlign: "center" }}>
      <h2>文字を入力してください</h2>
      <input
        type="text"
        value={text}
        onChange={handleChange}
        placeholder="ここに入力"
      />
      <p>入力内容:{text}</p>
    </div>
  );
}

export default InputExample;
🧩 ポイント
  • value={text} → inputの値をReactの状態で管理
  • onChange → 入力のたびにsetText()で状態更新

Reactは「状態がUIを決める」一方向データフローが基本です。

💡 関数型更新で安全に値を更新する

useStateは非同期的に動作するため、連続で更新するときに前の値がずれることがあります。
その場合は「関数型更新」を使うのが安全です👇

setCount(prevCount => prevCount + 1);

これにより、Reactが最新の状態を正しく参照してくれます。

🧩 複数のuseStateを使う

複数の状態を同時に管理することも可能です👇

App.jsx
function MultiStateExample() {
  const [count, setCount] = useState(0);
  const [name, setName] = useState("React");

  return (
    <div style={{ textAlign: "center" }}>
      <p>{name} カウンター:{count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setName("Vite")}>名前を変更</button>
    </div>
  );
}

✅ まとめ

内容 ポイント
useStateとは? 状態を管理するReactの基本フック
setState関数 状態を更新するとUIも更新される
関数型更新 安全に前回の状態をもとに更新できる
複数useState 状態を複数個管理してもOK

🧭 最後に

この記事では、useStateの基本をサンプル付きで紹介しました。
最後までご覧いただきありがとうございます。この記事が皆様に少しでもお役に立てることを祈っております。これからも色々な記事を投稿していきますので、お付き合いいただければと思います。これからもよろしくお願いします。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?