👋
Zustandで始める「一番シンプルな」React状態管理
1. はじめに
- Reactの状態管理は、もはやReduxほどの大げさな仕組みを必要としません。
- Zustandなら、数行のコードで「グローバルな状態」を作成し、コンポーネントからフックとして呼び出すだけ。
- 今回は、最も基本的なカウンターアプリを例に、その「薄さ」と「便利さ」を解説します。
2. インストール
まずはパッケージの追加から。
npm install zustand
3. ストアの作成(基本コード)
ここがZustandの肝です。create関数を使って、状態(state)とそれを更新する関数(action)を一つのオブジェクトにまとめます。
import { create } from 'zustand'
const useStore = create((set) => ({
count: 0,
// 状態を更新するアクション
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
reset: () => set({ count: 0 }),
}))
export default useStore;
4. コンポーネントでの使用
Providerでラップする必要もありません。使いたい場所でインポートして呼び出すだけです。
import useStore from './store'
function Counter() {
// 必要な状態や関数だけをセレクトして取り出す
const count = useStore((state) => state.count)
const increment = useStore((state) => state.increment)
return (
<div>
<h1>{count}</h1>
<button onClick={increment}>プラス</button>
</div>
)
}
5. なぜZustandがいいのか?(まとめ)
- ボイラープレートがほぼゼロ: ReduxのようにAction TypeやReducerを分ける必要がない。
-
フックベース:
useStoreと書くだけでReactのフックとして動作し、直感的に扱える。 - レンダリングの最適化: 必要な状態だけをセレクトして取得するため、不要な再レンダリングを抑えやすい。
Discussion