レッスン一覧に戻る

useStateの基礎

レッスン 1

コンポーネントの状態を管理するuseStateフックの使い方を学びます

推定学習時間: 25分

useStateとは

useStateは、Reactコンポーネントの状態(データ)を保存し、変更するためのフック(機能)です。

💡 状態(State)とは?

状態(State)とは、コンポーネントが持つ「変化するデータ」のことです。 例えば、ユーザーの入力値、クリック回数、ON/OFFの切り替えなどが状態に当たります。

🎯 例えで理解しよう

💾 メモ帳の例: useStateは「メモ帳」のようなものです。 情報を書き留めて(状態を保存)、後で見返したり書き直したり(状態を変更)できます。

📦 箱の例: useStateは「データを入れる箱」のようなものです。 箱に何かを入れて(状態を保存)、中身を取り出したり、別のものに入れ替えたり(状態を変更)できます。

🔄 変数の進化版: useStateは「普通の変数の進化版」です。 変数と違って、値が変わると画面が自動的に更新されます。

useStateの流れ図解

useState(0)初期値: 0↓ 2つの値を返すcount0setCount更新関数setCount(5)呼び出し↓ 状態が更新count5自動再描画画面が更新

1. 初期化: useState(0)で初期値0を設定

2. 戻り値: 現在の値(count)と更新関数(setCount)を取得

3. 更新: setCount(5)で状態を5に更新

4. 再描画: 状態が変わると、コンポーネントが自動的に再描画され、画面が更新されます

✅ useStateを使う理由

  • データの保存: ユーザーの入力や操作結果を保存できます
  • 自動更新: 状態が変わると、コンポーネントが自動的に再描画されます
  • リアルタイム反映: 状態の変更が即座に画面に反映されます

基本的な使い方

useStateの基本的な書き方を学びましょう。

📝 useStateの基本構文

import { useState } from "react"; const MyComponent = () => { // useStateの基本的な書き方 // const [状態の名前, 状態を変更する関数] = useState(初期値); const [count, setCount] = useState(0); return ( <div> <p>カウント: {count}</p> <button onClick={() => setCount(count + 1)}>+1</button> </div> ); };

1. useStateのインポート: ReactからuseStateをインポートします

2. 状態の定義: const [count, setCount] = useState(0);のように書きます

3. 状態の使用: {count}のように状態を表示に使います

4. 状態の更新: setCount(count + 1)のように関数を使って状態を更新します

✅ ポイント

  • useStateは2つの値を返します:現在の値と、その値を変更する関数
  • 状態を変更する関数名は通常、set + 状態名とします(例:count → setCount)
  • 状態が変更されると、コンポーネントが自動的に再描画されます
  • 直接状態を変更してはいけません(例:count = count + 1は❌)

🎯 成果物(実際の動作)

カウント: 0

様々な型の状態

useStateは、数値、文字列、真偽値、配列、オブジェクトなど、様々な型のデータを保存できます。

📝 数値型の状態

const Counter = () => { // 数値型の状態(初期値は0) const [count, setCount] = useState(0); return ( <div> <p>カウント: {count}</p> <button onClick={() => setCount(count + 1)}>増やす</button> <button onClick={() => setCount(count - 1)}>減らす</button> </div> ); };

🎯 成果物(実際の動作)

カウント: 0

📝 文字列型の状態

const TextInput = () => { // 文字列型の状態(初期値は空文字列) const [text, setText] = useState(""); return ( <div> <input type="text" value={text} onChange={(e) => setText(e.target.value)} placeholder="入力してください" /> <p>入力された値: {text}</p> </div> ); };

🎯 成果物(実際の動作)

入力された値:

📝 真偽値型の状態

const Toggle = () => { // 真偽値型の状態(初期値はfalse) const [isOn, setIsOn] = useState(false); return ( <div> <button onClick={() => setIsOn(!isOn)}> {isOn ? "ON" : "OFF"} </button> <p>状態: {isOn ? "オン" : "オフ"}</p> </div> ); };

状態の更新方法

状態を更新するには、useStateから返された関数を使用します。

状態更新の流れ

1

初期状態

count = 0

useState(0)で初期化

2

更新関数を呼ぶ

setCount(5)

ボタンクリックなどで実行

3

状態が更新

count = 5

値が0から5に変更

4

自動再描画

画面が更新

新しい値が画面に反映

💡 状態が更新されると、Reactが自動的にコンポーネントを再描画し、画面に新しい値が反映されます

📝 直接値を設定する方法

const [name, setName] = useState(""); // 新しい値を直接設定 setName("太郎"); setName("花子");

📝 現在の値を使って更新する方法

const [count, setCount] = useState(0); // 現在の値を使って更新 const increment = () => { setCount(count + 1); // countの現在の値に1を足す }; const decrement = () => { setCount(count - 1); // countの現在の値から1を引く };

💡 関数を使って更新する場合は、現在の値を参照して新しい値を計算します。

⚠️ 重要な注意点

  • 状態を直接変更してはいけません(例:count = count + 1は❌)
  • 必ず更新関数を使用してください(例:setCount(count + 1)は✅)
  • 状態の更新は非同期で行われます。更新直後に状態を参照しても、古い値が返される可能性があります。

📚 例題

実際にuseStateを使ってコンポーネントを作成してみましょう。

例題: 年齢表示コンポーネント

年齢を状態として管理し、数値入力で変更できるコンポーネントを作成してください。

const AgeDisplay = () => { // 年齢を状態として定義(初期値は20) const [age, setAge] = useState(20); return ( <div> <label> 年齢: <input type="number" value={age} onChange={(e) => setAge(Number(e.target.value))} /> </label> <p>私は{age}歳です</p> </div> ); };

実際の表示結果

私は20歳です

💡 上のコードを実行すると、このように変数の値が表示されます。年齢を変更して、表示が更新されることを確認してみましょう!

まとめ

🎯 覚えておきたいポイント

  1. useStateは状態を保存し、変更するためのフックです
  2. const [値, 更新関数] = useState(初期値);の形式で使用します
  3. 状態を変更するには、必ず更新関数を使用します(直接変更は❌)
  4. 状態が変更されると、コンポーネントが自動的に再描画されます