React useState Hook — 完全ガイドと例

ReactのuseStateを使ったコンポーネント状態管理の方法を学びます。基本的な使い方、関数型更新、遅延初期化、初心者から上級者向けの一般的なパターンを網羅。

State Hooks

詳細な説明

useStateの理解

useStateは最も基本的なReact Hookです。関数コンポーネントに状態を追加でき、クラスコンポーネントのthis.statethis.setStateの必要性を置き換えます。

基本構文

const [state, setState] = useState(initialValue);

Hookはタプルを返します:現在の状態値とセッター関数です。Reactは各コンポーネント内のHook呼び出しの順序を追跡することで、再レンダリング間で状態を保持します。

関数型更新

新しい状態が前の状態に依存する場合、setStateの関数型を使用します:

setCount(prevCount => prevCount + 1);

これにより古いクロージャのバグを回避し、常に最新の値で作業できます。特に状態を参照するイベントハンドラやエフェクトで重要です。

遅延初期化

初期状態の計算が高コストな場合、値の代わりに関数を渡します:

const [data, setData] = useState(() => {
  return JSON.parse(localStorage.getItem("data") || "{}");
});

関数は最初のレンダリング時にのみ実行され、以降のレンダリングでの不要な計算を回避します。

オブジェクトと配列

クラスコンポーネントのsetStateとは異なり、useStateのセッターはオブジェクトをマージしません。手動でスプレッドする必要があります:

const [user, setUser] = useState({ name: "", age: 0 });
setUser(prev => ({ ...prev, name: "Alice" }));

複数のuseState呼び出しを使うタイミング

状態が論理的に独立している場合、複数のuseState呼び出しに分割します。常に一緒に変更される場合は、単一のオブジェクトにまとめるかuseReducerの使用を検討してください。

ユースケース

フォーム入力、トグルフラグ、カウンター、選択された項目など、シンプルで独立した状態にuseStateを使用します。React関数コンポーネントでの状態ロジックの出発点です。

試してみる — React Hooks Reference

フルツールを開く