🦁
ZustandとValtioの比較 (React状態管理ライブラリの話)
最近書いた2つのツイートのポイントをまとめておきます。
storeの作り方
Zustandの場合
import create from 'zustand'
const useStore = create((set) => ({
count1: 0,
count2: 0,
inc1: () => set((state) => ({ count1: state.count1 + 1 })),
inc2: () => set((state) => ({ count2: state.count2 + 1 })),
}))
-
create
は hookを返す -
set
で更新する
Valtioの場合
import { proxy, useSnapshot } from 'valtio'
const state = proxy({
count1: 0,
count2: 0,
inc1: () => { ++state.count1 },
inc2: () => { ++state.count2 },
})
-
proxy
は JavaScriptのproxy化されたobjectを返す -
state
を直接更新する
Reactコンポーネントでの使い方
Zustandの場合
const count1 = useStore((state) => state.count1)
const inc1 = useStore((state) => state.inc1)
- 作った
useStore
を使う - selectorを使って、値とアクション関数をそれぞれ取り出す
Valtioの場合
const { count1, inc1 } = useSnapshot(state)
-
useSnapshot
を使って、作ったstate
を渡す - object destructuringで値とアクション関数を取り出す(再レンダリングは自動で最適化される)
GitHubリンク
Discussion