DEV Community

Anish
Anish

Posted on • Edited on

The Subtle Art of State Management Without Redux or Zustand

State management is the frontend engineer’s favorite battleground. Every team has a war story:

  • Too much prop drilling
  • Context providers everywhere
  • Redux boilerplate bigger than the app itself

I’ve seen teams spend weeks debating whether to use Redux, Zustand, MobX, or Context.

But here’s the thing: you don’t always need a library. With careful patterns, React’s built-ins can take you surprisingly far.


  • Start with useState

Most apps don’t need global state. Local useState is the simplest, fastest, and most debuggable tool.

Use State

When state doesn’t need to escape a component, keep it there.

  • Reach for useReducer for Complex State

Use Reducer

This makes logic predictable without extra libraries.

  • Context Splitting Beats Prop Drilling

Context is powerful but easy to misuse. Instead of one giant provider, split contexts by domain.

Context Markdown

This way, auth updates don’t re-render the entire dashboard, and theme changes don’t ripple unnecessarily through profile components.

AuthContext

Scoped contexts = faster renders.

Now only auth-related consumers re-render when the auth state changes.

  • Add Undo/Redo with a Custom Hook

Sometimes you want time-travel state without Redux. Hooks can do it in a few lines.

History Redux

Now you’ve got a mini Redux with history baked in.

The Big Takeaway

Every abstraction has a cost. Before reaching for Zustand or Redux, ask yourself if you can solve the problem with a combination of useState, useReducer, and a few smart contexts. Most of the time, you can.

“Good state management is like good design—it disappears into the background.”

💬 Curious: how far have you pushed React’s built-ins before you needed a state library? Drop your war stories—I’d love to hear them.

Top comments (0)