From wshobson-react-state-management
Guides modern React state management with Redux Toolkit, Zustand, Jotai, and React Query. Use for global state setup, server state, or choosing solutions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/wshobson-react-state-management:react-state-managementThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive guide to modern React state management patterns, from local component state to global stores and server state synchronization.
Comprehensive guide to modern React state management patterns, from local component state to global stores and server state synchronization.
| Type | Description | Solutions |
|---|---|---|
| Local State | Component-specific, UI state | useState, useReducer |
| Global State | Shared across components | Redux Toolkit, Zustand, Jotai |
| Server State | Remote data, caching | React Query, SWR, RTK Query |
| URL State | Route parameters, search | React Router, nuqs |
| Form State | Input values, validation | React Hook Form, Formik |
Small app, simple state → Zustand or Jotai
Large app, complex state → Redux Toolkit
Heavy server interaction → React Query + light client state
Atomic/granular updates → Jotai
// store/useStore.ts
import { create } from 'zustand'
import { devtools, persist } from 'zustand/middleware'
interface AppState {
user: User | null
theme: 'light' | 'dark'
setUser: (user: User | null) => void
toggleTheme: () => void
}
export const useStore = create<AppState>()(
devtools(
persist(
(set) => ({
user: null,
theme: 'light',
setUser: (user) => set({ user }),
toggleTheme: () => set((state) => ({
theme: state.theme === 'light' ? 'dark' : 'light'
})),
}),
{ name: 'app-storage' }
)
)
)
// Usage in component
function Header() {
const { user, theme, toggleTheme } = useStore()
return (
<header className={theme}>
{user?.name}
<button onClick={toggleTheme}>Toggle Theme</button>
</header>
)
}
Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.
// Before (legacy Redux)
const ADD_TODO = "ADD_TODO";
const addTodo = (text) => ({ type: ADD_TODO, payload: text });
function todosReducer(state = [], action) {
switch (action.type) {
case ADD_TODO:
return [...state, { text: action.payload, completed: false }];
default:
return state;
}
}
// After (Redux Toolkit)
const todosSlice = createSlice({
name: "todos",
initialState: [],
reducers: {
addTodo: (state, action: PayloadAction<string>) => {
// Immer allows "mutations"
state.push({ text: action.payload, completed: false });
},
},
});
5plugins reuse this skill
First indexed Jun 3, 2026
npx claudepluginhub p/wshobson-wshobson-react-state-management-plugins-frontend-mobile-development-skills-react-state-managementGuides modern React state management with Redux Toolkit, Zustand, Jotai, and React Query. Use for global state setup, server state, or choosing solutions.
Guides React state management with Redux Toolkit, Zustand, Jotai, and React Query. Covers global state, server state, optimistic updates, and migration from legacy Redux.
Covers modern React state management with Redux Toolkit, Zustand, Jotai, and React Query. Useful when setting up global state, managing server state, or choosing between solutions.