Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Master modern React state management with Redux Toolkit, Zustand, Jotai, and React Query. Use when setting up global state, managing server state, or choosing between state management solutions.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-01 | ✓→✗ | ▼ Worse | 20% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 33% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 72% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 20% | 0% |
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 → Jotaitypescript// 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.
typescript// 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 }); }, }, });
Other measured skills in the registry, with their headline benchmark lift.