状態管理

Jotai基礎

atom と useAtom で始めるシンプルな状態管理

Jotai とは?
React のための最小限の状態管理ライブラリ

Jotai(状態)は、React の状態管理をシンプルにするライブラリです。atomという単位で状態を定義し、useAtomフックで読み書きします。

🪶 ミニマル

コア API は atom と useAtom だけ。学習コストが低い

🔄 useState ライク

useState と同じ感覚で使える。移行が簡単

⚡ 最小再レンダリング

atom 単位で購読するため、不要な再レンダリングが起きない

インストール

pnpm add jotai
基本的なカウンター
atom() と useAtom() の最もシンプルな使い方
0

Step 1: Atom を定義する

// コンポーネントの外で定義する(重要!)
const countAtom = atom(0);

Step 2: コンポーネントで使う

const [count, setCount] = useAtom(countAtom);
// ↑ useState とほぼ同じ使い方!
読み取り専用 / 書き込み専用
useAtomValue と useSetAtom の使い分け

上のカウンターはuseAtomValueuseSetAtomを別々のコンポーネントで使っています。

値だけ読む(再レンダリング最適化)

const count = useAtomValue(countAtom);

値を書くだけ(値変更で再レンダリングしない)

const setCount = useSetAtom(countAtom);

両方使う(useState と同じ)

const [count, setCount] = useAtom(countAtom);
文字列の Atom
テキスト入力の状態管理
const nameAtom = atom("");
const [name, setName] = useAtom(nameAtom);
オブジェクトの Atom
オブジェクトの状態をスプレッド構文で更新する

現在の状態

{ "name": "", "age": 0 }

オブジェクトの更新(スプレッド構文)

setProfile((prev) => ({ ...prev, name: value }));
// ↑ 既存のプロパティを残しつつ、一部を更新
useState vs Jotai
いつ Jotai を使うべき?
特徴useStateJotai
スコープコンポーネント内グローバル(アプリ全体)
状態の共有props で渡す必要ありどこからでもアクセス可能
再レンダリング親の再レンダリングが伝播atom を使うコンポーネントだけ
向いている場面ローカルな UI 状態複数コンポーネント間で共有する状態
Next Steps
次のステップ

派生 Atom(Derived Atom)で、既存の atom から新しい値を計算する方法を学びましょう。