Skill: state-management
State management patterns and implementation. Trigger when the user wants to manage global state, use Redux, Zustand, or other solutions.
Configuration
| Property | Value |
|---|---|
| Context | inline |
| Pre-approved tools | None declared: the project's permission settings apply |
| Trigger | keywords: state, management |
Detailed description
State Management (pointer)
Library APIs, install steps and idiomatic code drift on each release and are canonical at:
- Zustand — docs.pmnd.rs/zustand (recommended default; 1.2kb, hooks-first)
- Redux Toolkit — redux-toolkit.js.org (enterprise scale, devtools)
- Jotai — jotai.org (atomic model, 2kb)
- TanStack Query — tanstack.com/query (server state, NOT global client state)
- React 19 built-ins — react.dev (
useReducer,useOptimistic,use(Context), Actions)
Decision tree (version-agnostic)
Need shared state?
├── No → useState/useReducer
└── Yes →
├── Server state (fetch + cache + invalidate) → TanStack Query / SWR
├── Forms → React Hook Form
├── Small client state (<5 stores) → Zustand
├── Large client state (>5 stores) → Redux Toolkit
└── Theme/Auth singletons → Context + useReducer
Foundation discipline (keep across releases)
- Client vs server state: never put server state in a client store (Zustand/Redux). Use TanStack Query for fetched data; Zustand/Redux for UI state, filters, drafts.
- Domain separation: one store per domain, not one global store. Easier to test and lazy-load.
- Granular selectors: subscribe to slices, not whole stores — see [[dev-react-perf]] for re-render audit when a store change cascades.
See also
dev-react-perfskill — re-render diagnosis when selectors are too broaddev-tdd— store reducers/selectors test well in isolation (no DOM needed)- Redux Toolkit — from v2.12 the
@reduxjs/toolkitnpm package ships eight skills of its own (modern Redux, slices and selectors, state ownership, side effects, RTK Query, debugging, migration) undernode_modules/@reduxjs/toolkit/skills/, versioned with the library you installed. Link the ones you need into.claude/skills/with what they declare inrequires:(modern-reduxneedsredux-dataflow); in a repository that versions.claude/, copy them instead. Screened: the 2.13.0 contents. Zustand, Jotai and TanStack Query ship none (2026-10-04).
Automatic triggering
This skill is automatically activated when:
- The matching keywords are detected in the conversation
- The task context matches the skill's domain
Triggering examples
- "I want to state..."
- "I want to management..."
Context inline
Inline means the skill runs in the conversation (the default, no context key):
- Sees the full history
- Its work is visible as it happens
- Right for almost every skill