React

State without tears: when Zustand beats Redux

Not every app needs a reducer cathedral. A pragmatic map of where each kind of state actually belongs.

KB Kambiz BaghieJan 20267 min

Four homes for state

  • The URL — anything shareable or back-button-able: filters, tabs, the open item.
  • React Query — anything that came from a server. It’s a cache, not state you own.
  • Zustand — genuinely global client state: the live socket feed, a cart, theme.
  • Component state — everything else, kept as local as it can be.

Where Zustand wins

Zustand shines when you need a global store without the ceremony — no providers, no action constants, no boilerplate per slice. You write a hook, you read a slice, you’re done. For transient high-frequency data it’s especially good because it lives outside React and updates surgically.

Most “state management problems” are really “I put server data in the wrong place” problems.

Where Redux still earns its keep

Large teams that need strict conventions, time-travel debugging, or a heavily middleware-driven pipeline still get real value from Redux Toolkit. The point isn’t that one is better — it’s matching the tool to the state’s actual shape and lifetime.

Working draft. An outline of the real article — the full write-up is on the way. The notes below are genuine takeaways from shipping this in production.