Loading...
Loading...
Zustand v5 state management for React. Covers TypeScript stores with double-parentheses syntax, persist middleware with hydration handling, devtools, subscribeWithSelector, slices pattern for large apps, SSR/Next.js provider pattern, immer middleware, auto-generating selectors, testing, and vanilla stores. Use when setting up global state, configuring persist middleware, implementing slices pattern, migrating from Redux or Context, testing stores, or troubleshooting hydration and TypeScript issues.
npx skill4agent add oakoss/agent-skills zustanduseSyncExternalStoreuseSyncExternalStorecreateWithEqualityFnuse-sync-external-store| Pattern | API | Key Points |
|---|---|---|
| Basic store | | Double parentheses required for TS |
| Atomic selector | | Only re-renders when selected value changes |
| Multiple values | | Import from |
| Persist | | localStorage with SSR hydration handling |
| Devtools | | Redux DevTools integration |
| SubscribeWithSelector | | Subscribe to state slices outside React |
| Middleware order | | Outer to inner wrapping |
| Slices pattern | | Split store by domain |
| SSR provider | | Per-request stores prevent data leaks |
| Immer | | Safe nested state mutations |
| Vanilla store | | Use outside React |
| Reset store | | Use |
| Derived values | | Compute in selector |
| Auto selectors | | Generate |
| Mistake | Correct Pattern |
|---|---|
Using | Use |
Selecting full state object with | Use atomic selectors like |
Importing | Import from |
| Creating new object references in selectors causing infinite loops | Use separate primitive selectors or wrap with |
| Using a global singleton store with SSR or Next.js | Use the |
| Tracking initial state manually for reset | Use |
| Using Zustand for server-fetched data that needs caching and revalidation | Use TanStack Query for server state; reserve Zustand for client-only global state |
PlanTaskExploreTask