📊 最新の進捗状況:
jotai-migration-progress.mdを参照
useSWRStatic や useContextSWR による複雑な状態管理役割分担の明確化:
states/
├── ui/
│ ├── sidebar.ts # サイドバー状態 ✅
│ ├── device.ts # デバイス状態 ✅
│ ├── editor.ts # エディター状態 ✅(部分)
│ ├── page.ts # ページ関連状態(次の対象)
│ └── modal.ts # モーダル状態(未作成)
└── hydrate/
└── sidebar.ts # SSRハイドレーション ✅
// 永続化が必要な状態
const someSettingAtom = atom(defaultValue);
const someSettingAtomExt = atom(
get => get(someSettingAtom),
(get, set, update: ValueType) => {
set(someSettingAtom, update);
scheduleToPut({ settingKey: update });
},
);
export const useSomeSetting = () => useAtom(someSettingAtomExt);
// 永続化不要な一時的な状態
const temporaryStateAtom = atom(defaultValue);
export const useTemporaryState = () => useAtom(temporaryStateAtom);
// states/hydrate/feature.ts
export const useHydrateFeatureAtoms = (initialData: InitialData) => {
useHydrateAtoms([
[featureAtom, initialData.feature],
// 他のatoms...
]);
};
{feature}Atomuse{Feature}{feature}AtomExtuseState に近い使用感useHydrateAtoms(公式パターン)scheduleToPut機構と連携以下の値は Next.js の dynamic routing によるページ遷移時に値の更新が必要な可能性があります:
これらの値については、現在のSWR実装から段階的にJotaiへの移行を検討する必要があります。 移行時には以下の点を考慮する必要があります:
useEffect と useRouter を使用した値の同期useHydrateAtoms による SSR からの初期値設定