For years, state management was the most debated topic in the React ecosystem. Redux, MobX, Zustand, Jotai — the options multiplied faster than anyone could evaluate them.
The shift to server-first
React Server Components and libraries like TanStack Query moved the default: most "state" is actually server data, and it belongs in a cache, not a store. Once you internalize this, the amount of client state in a typical app shrinks dramatically.
What's left is UI state — modal open/closed, form inputs, selected tabs. For this, useState and useContext are usually enough.
When you still need a store
Complex client-only interactions (drag-and-drop builders, collaborative editors, offline-first apps) still benefit from a dedicated store. But for the vast majority of CRUD applications, a query cache plus local component state covers everything.
The best state management strategy is the one with the least state to manage.