React state management consolidated dramatically in 2024–25. TanStack Query (formerly React Query) won the server-state slot. Zustand displaced Redux as the default global client-state pick. Jotai carved out the atomic-state niche. Redux Toolkit still has a place in legacy + enterprise, but it's no longer the default for new React apps.
Pick by what state you're managing
| State type |
Pick |
| Server state (API data) |
TanStack Query |
| Global client state (theme, user, modal) |
Zustand |
| Granular atomic state |
Jotai |
| URL state |
React Router 7 / TanStack Router |
| Form state |
React Hook Form |
| Component-local state |
useState / useReducer |
Most React apps need 2–3 of these together — they're complementary, not competing.
Server state — TanStack Query
Non-negotiable for any app fetching data. Caching, deduplication, refetch on focus, optimistic updates — all built in. Replaces 200+ lines of useEffect + useState boilerplate with one useQuery hook.
When you need it: any app talking to an API. Which is most apps.
Global client state — Zustand
Tiny (1.5kb), simple API, works perfectly with TypeScript. Hooks-based. No providers, no boilerplate. The "I just need shared state across components without ceremony" answer.
const useStore = create((set) => ({
count: 0,
inc: () => set((s) => ({ count: s.count + 1 })),
}));
When Zustand wins: 90% of new React apps for global state.
Atomic state — Jotai
Atom-based reactivity. Each piece of state is an atom; components only re-render when atoms they read change. Best when granular update control matters.
When Jotai wins: forms with complex interdependencies, design tools, real-time collaborative apps.
What's NOT worth your money
- Redux Toolkit for new projects — most cases solved by Zustand + TanStack Query with less code
- MobX in 2026 — Jotai or Zustand cover the reactive use cases more idiomatically
- Recoil — Meta deprecated it; use Jotai instead
- Apollo Client just for caching when TanStack Query covers the same with less complexity
FAQ
Should I migrate Redux to Zustand?
For greenfield: yes. For existing apps with working Redux: not unless you're refactoring anyway.
TanStack Query + Zustand together?
Yes — that's the standard 2026 stack. TanStack Query for server data, Zustand for client UI state.
Best for React Native?
All three work. Zustand is most popular in RN ecosystem.
Form state — React Hook Form vs Zustand?
React Hook Form for forms (validation, performance optimizations baked in). Zustand for non-form UI state.
Best learning curve?
Zustand. ~30 minutes to be productive.
Best for very large apps?
Redux Toolkit still scales well in 1000+ component codebases. Zustand also scales but less prescriptive.
Related reading