/react-state
Zustand v5 state management for React. Use when implementing global state, stores, persist, or client-side state.
$ npx -y skills add fusengine/agents --skill react-state --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/react-state
Context preview
The summary Claude sees to decide when to auto-load this skill.
Zustand v5 state management for React. Use when implementing global state, stores, persist, or client-side state.
SKILL.md
react-state.SKILL.mdname: react-state
description: Zustand v5 state management for React. Use when implementing global state, stores, persist, or client-side state.
versions:
zustand: 5.0
react: 19
user-invocable: true
references: references/installation.md, references/store-patterns.md, references/middleware.md, references/typescript.md, references/slices.md, references/auto-selectors.md, references/reset-state.md, references/subscribe-api.md, references/testing.md, references/migration-v5.md
related-skills: react-19, react-forms, solid-react
<objective> Implements Zustand v5 global state management for React applications: the v5 currying syntax (`create<State>()((set) => ({...}))`), the selector pattern (`useStore((s) => s.field)`), `useShallow` for array/object selectors to prevent unnecessary re-renders, and middleware composition (devtools → persist → immer, order-sensitive for TypeScript).
Covers separating stores by domain (auth, cart, ui, theme) rather than one giant store, SOLID file organization (`store.ts`, `store.interface.ts`, `use-store.ts`), and forbidden patterns (persisting auth tokens, v4 syntax, skipping `useShallow`). This is the plain-React variant of Zustand (no App Router request-isolation concerns) — for Next.js App Router see nextjs-zustand, and for server state use TanStack Query instead of this skill. </objective>
Zustand for React
Minimal, scalable state management with React 18+ useSyncExternalStore.
Agent Workflow (MANDATORY)
Before ANY implementation, use `TeamCreate` to spawn 3 agents:
1. **fuse-ai-pilot:explore-codebase** - Analyze existing stores and state patterns 2. **fuse-ai-pilot:research-expert** - Verify latest Zustand v5 docs via Context7/Exa 3. **mcp__context7__query-docs** - Check middleware and TypeScript patterns
After implementation, run **fuse-ai-pilot:sniper** for validation.
---
Overview
When to Use
- Managing global state in React applications
- Need state shared across components
- Persisting state to localStorage/sessionStorage
- Building UI state (modals, sidebars, theme, cart)
- Replacing React Context for complex state
Why Zustand v5
| Feature | Benefit | |---------|---------| | Minimal API | Simple create() function, no boilerplate | | React 18 native | useSyncExternalStore, no shims needed | | TypeScript first | Full inference with currying pattern | | Middleware stack | devtools, persist, immer composable | | Bundle size | ~2KB gzipped, smallest state library | | No providers | Direct store access, no Context wrapper |
---
Critical Rules
1. **useShallow for arrays/objects** - Prevent unnecessary re-renders 2. **Currying syntax v5** - `create<State>()((set) => ({...}))` 3. **SOLID paths** - Stores in `modules/[feature]/src/stores/` 4. **Separate stores** - One store per domain (auth, cart, ui, theme) 5. **Server state elsewhere** - Use TanStack Query for server state
---
SOLID Architecture
Module Structure
Stores organized by feature module:
- `modules/cores/stores/` - Shared stores (theme, ui)
- `modules/auth/src/stores/` - Auth state
- `modules/cart/src/stores/` - Cart state
- `modules/[feature]/src/interfaces/` - Store types
File Organization
| File | Purpose | Max Lines | |------|---------|-----------| | `store.ts` | Store creation with create() | 50 | | `store.interface.ts` | TypeScript interfaces | 30 | | `use-store.ts` | Custom hook with selector | 20 |
---
Key Concepts
Store Creation (v5 Syntax)
Double parentheses required for TypeScript inference. Currying pattern ensures full type safety.
Middleware Composition
Stack middlewares: devtools -> persist -> immer. Order matters for TypeScript types.
Selector Pattern
Always use `useStore((s) => s.field)` for performance. Use `useShallow` for array/object selectors.
---
Reference Guide
| Need | Reference | |------|-----------| | Initial setup | [installation.md](references/installation.md) | | Store patterns | [store-patterns.md](references/store-patterns.md) | | Middleware | [middleware.md](references/middleware.md) | | TypeScript | [typescript.md](references/typescript.md) | | Slices pattern | [slices.md](references/slices.md) | | Auto selectors | [auto-selectors.md](references/auto-selectors.md) | | Reset state | [reset-state.md](references/reset-state.md) | | Subscribe API | [subscribe-api.md](references/subscribe-api.md) | | Testing | [testing.md](references/testing.md) | | Migration v4→v5 | [migration-v5.md](references/migration-v5.md) |
---
Best Practices
1. **Selector pattern** - Always use `useStore((s) => s.field)` for performance 2. **useShallow** - Wrap array/object selectors to prevent re-renders 3. **Separate stores** - One store per domain (auth, cart, ui, theme) 4. **Server data elsewhere** - Use TanStack Query for server state 5. **DevTools in dev only** - Wrap devtools in process.env check 6. **Partialize persist** - Only persist necessary fields, never tokens
---
Forbidden Patterns
| Pattern | Reason | Alternative | |---------|--------|-------------| | Persisting auth tokens | Security vulnerability | httpOnly cookies | | Without useShallow on objects | Excessive re-renders | `useShallow(selector)` | | v4 syntax | TypeScript inference broken | v5 currying `create<T>()()` | | Giant monolithic store | Hard to maintain | Slices or separate stores |
Read more
name: react-state description: Zustand v5 state management for React. Use when implementing global state, stores, persist, or client-side state. versions: zustand: 5.0 react: 19 user-invocable: true references: references/installation.md, references/store-patterns.md, references/middleware.md, references/typescript.md, references/slices.md, references/auto-selectors.md, references/reset-state.md, references/subscribe-api.md, references/testing.md, references/migration-v5.md related-skills: react-19, react-forms, solid-react
<objective> Implements Zustand v5 global state management for React applications: the v5 currying syntax (`create<State>()((set) => ({...}))`), the selector pattern (`useStore((s) => s.field)`), `useShallow` for array/object selectors to prevent unnecessary re-renders, and middleware composition (devtools → persist → immer, order-sensitive for TypeScript).
Covers separating stores by domain (auth, cart, ui, theme) rather than one giant store, SOLID file organization (`store.ts`, `store.interface.ts`, `use-store.ts`), and forbidden patterns (persisting auth tokens, v4 syntax, skipping `useShallow`). This is the plain-React variant of Zustand (no App Router request-isolation concerns) — for Next.js App Router see nextjs-zustand, and for server state use TanStack Query instead of this skill. </objective>
Zustand for React
Minimal, scalable state management with React 18+ useSyncExternalStore.
Agent Workflow (MANDATORY)
Before ANY implementation, use `TeamCreate` to spawn 3 agents:
1. **fuse-ai-pilot:explore-codebase** - Analyze existing stores and state patterns 2. **fuse-ai-pilot:research-expert** - Verify latest Zustand v5 docs via Context7/Exa 3. **mcp__context7__query-docs** - Check middleware and TypeScript patterns
After implementation, run **fuse-ai-pilot:sniper** for validation.
---
Overview
When to Use
- Managing global state in React applications
- Need state shared across components
- Persisting state to localStorage/sessionStorage
- Building UI state (modals, sidebars, theme, cart)
- Replacing React Context for complex state
Why Zustand v5
| Feature | Benefit | |---------|---------| | Minimal API | Simple create() function, no boilerplate | | React 18 native | useSyncExternalStore, no shims needed | | TypeScript first | Full inference with currying pattern | | Middleware stack | devtools, persist, immer composable | | Bundle size | ~2KB gzipped, smallest state library | | No providers | Direct store access, no Context wrapper |
---
Critical Rules
1. **useShallow for arrays/objects** - Prevent unnecessary re-renders 2. **Currying syntax v5** - `create<State>()((set) => ({...}))` 3. **SOLID paths** - Stores in `modules/[feature]/src/stores/` 4. **Separate stores** - One store per domain (auth, cart, ui, theme) 5. **Server state elsewhere** - Use TanStack Query for server state
---
SOLID Architecture
Module Structure
Stores organized by feature module:
- `modules/cores/stores/` - Shared stores (theme, ui)
- `modules/auth/src/stores/` - Auth state
- `modules/cart/src/stores/` - Cart state
- `modules/[feature]/src/interfaces/` - Store types
File Organization
| File | Purpose | Max Lines | |------|---------|-----------| | `store.ts` | Store creation with create() | 50 | | `store.interface.ts` | TypeScript interfaces | 30 | | `use-store.ts` | Custom hook with selector | 20 |
---
Key Concepts
Store Creation (v5 Syntax)
Double parentheses required for TypeScript inference. Currying pattern ensures full type safety.
Middleware Composition
Stack middlewares: devtools -> persist -> immer. Order matters for TypeScript types.
Selector Pattern
Always use `useStore((s) => s.field)` for performance. Use `useShallow` for array/object selectors.
---
Reference Guide
| Need | Reference | |------|-----------| | Initial setup | [installation.md](references/installation.md) | | Store patterns | [store-patterns.md](references/store-patterns.md) | | Middleware | [middleware.md](references/middleware.md) | | TypeScript | [typescript.md](references/typescript.md) | | Slices pattern | [slices.md](references/slices.md) | | Auto selectors | [auto-selectors.md](references/auto-selectors.md) | | Reset state | [reset-state.md](references/reset-state.md) | | Subscribe API | [subscribe-api.md](references/subscribe-api.md) | | Testing | [testing.md](references/testing.md) | | Migration v4→v5 | [migration-v5.md](references/migration-v5.md) |
---
Best Practices
1. **Selector pattern** - Always use `useStore((s) => s.field)` for performance 2. **useShallow** - Wrap array/object selectors to prevent re-renders 3. **Separate stores** - One store per domain (auth, cart, ui, theme) 4. **Server data elsewhere** - Use TanStack Query for server state 5. **DevTools in dev only** - Wrap devtools in process.env check 6. **Partialize persist** - Only persist necessary fields, never tokens
---
Forbidden Patterns
| Pattern | Reason | Alternative | |---------|--------|-------------| | Persisting auth tokens | Security vulnerability | httpOnly cookies | | Without useShallow on objects | Excessive re-renders | `useShallow(selector)` | | v4 syntax | TypeScript inference broken | v5 currying `create<T>()()` | | Giant monolithic store | Hard to maintain | Slices or separate stores |
A plugin ecosystem that turns Claude Code into a supervised, multi-agent development environment.
Repo: fusengine/agents
Other skills on fusengine-agents.
- /agent-creator
Use when creating expert agents. Generates agent.md with frontmatter, hooks, required sections, and skill references.
Open skill - /apex-methodology
Use when starting ANY development task -- feature, bug fix, refactor, hotfix (triggers: implement, create, build, fix, add feature, refactor, develop).
Open skill - /brainstorming
Use when creating a feature/component or adding functionality. Fires BEFORE APEX Analyze to refine requirements via structured questioning.
Open skill - /challenge
Use before a root-cause, done/verified claim, irreversible action, or 2nd-time fix reaches the owner (APEX or plain conversation); also fires at every eLicit/Verify gate. Not for code correctness (use sniper).
Open skill - /code-quality
Use when validating code quality after modifications -- SOLID compliance, DRY duplication, linter errors, architecture violations. Do NOT use for functional verification (run verification FIRST, then code-quality).
Open skill - /elicitation
Use when an expert agent self-reviews and self-corrects code after the Execute phase, before sniper validation (BMAD-METHOD elicitation techniques).
Open skill

