VOOZH about

URL: https://thenewstack.io/stop-blaming-react-for-your-state-management-hangover/

⇱ Stop Blaming React for Your State Management Hangover - The New Stack


TNS
SUBSCRIBE
Join our community of software engineering leaders and aspirational developers. Always stay in-the-know by getting the most important news and exclusive content delivered fresh to your inbox to learn more about at-scale software development.
REQUIRED
It seems that you've previously unsubscribed from our newsletter in the past. Click the button below to open the re-subscribe form in a new tab. When you're done, simply close that tab and continue with this form to complete your subscription.
The New Stack does not sell your information or share it with unaffiliated third parties. By continuing, you agree to our Terms of Use and Privacy Policy.
Welcome and thank you for joining The New Stack community!
Please answer a few simple questions to help us deliver the news and resources you are interested in.
REQUIRED
REQUIRED
REQUIRED
REQUIRED
REQUIRED
Great to meet you!
Tell us a bit about your job so we can cover the topics you find most relevant.
REQUIRED
REQUIRED
REQUIRED
REQUIRED
REQUIRED
Welcome!

We’re so glad you’re here. You can expect all the best TNS content to arrive Monday through Friday to keep you on top of the news and at the top of your game.

What’s next?

Check your inbox for a confirmation email where you can adjust your preferences and even join additional groups.

Follow TNS on your favorite social media networks.

Become a TNS follower on LinkedIn.

Check out the latest featured and trending stories while you wait for your first TNS newsletter.

PREV
1 of 2
NEXT
VOXPOP
As a JavaScript developer, what non-React tools do you use most often?
Angular
0%
Astro
0%
Svelte
0%
Vue.js
0%
Other
0%
I only use React
0%
I don't use JavaScript
0%
Thanks for your opinion! Subscribe below to get the final results, published exclusively in our TNS Update newsletter:
NEW! Try Stackie AI
From clobbered drafts to real-time sync
Apr 14th 2026 10:00am, by David Moore
TypeScript 6.0 RC arrives as a bridge to a faster future
Mar 14th 2026 9:00am, by Darryl K. Taft
Mastra empowers web devs to build AI agents in TypeScript
Jan 28th 2026 11:00am, by Loraine Lawson
2025-12-04 10:00:52
Stop Blaming React for Your State Management Hangover
Frontend Development / JavaScript / Software Development

Stop Blaming React for Your State Management Hangover

Your React state management issues aren't React's fault and new libraries aren't the answer — a solid architecture solves the root problem.
Dec 4th, 2025 10:00am by Alexander T. Williams
👁 Featued image for: Stop Blaming React for Your State Management Hangover
Image by Pablo Merchán Montes via Unsplash+.

Every time a React app misbehaves, the first tweet is some variation of “React sucks.” No, it isn’t (okay, who am I kidding, maybe a little bit) but what’s really breaking is your mental model of state.

Developers keep reaching for new state management libraries the way hungover people reach for greasy food: hoping it’ll fix what’s fundamentally self-inflicted. Zustand, Jotai, Recoil, Valtio — they’re all great tools.

But none of them can save you from chaos if you don’t understand how data moves through your app. React isn’t your scapegoat: your state architecture is the main culprit here.

The Addiction to Shiny State Management Solutions

The React ecosystem breeds new state management libraries and approaches faster than npm can warn you about vulnerabilities. Every few months, a new one trends on X, promising simplicity, performance and an end to boilerplate. Developers rush to install it, convinced this time they’ve found the one. The honeymoon lasts until the first prop drilling conflict or synchronization bug. Then it’s back to blaming React — again.

But these libraries don’t solve the root issue: unclear data flow. Developers layer global stores, contexts and hooks without ever asking why the data lives where it does. They’re duct-taping logic onto the framework instead of designing an architecture. When everything updates everything else, you’ve built a minefield, not a UI.

You can’t architect clarity by outsourcing thinking to the latest library.

What React gives you is composability. What you do with it determines whether your app feels elegant or brittle. You can’t architect clarity by outsourcing thinking to the latest library. You do it by understanding unidirectional data flow — React’s core principle — and sticking to it.

Understanding Context Overload and the Provider Pyramid

If your component tree looks like the inside of a Matryoshka doll, you’re not alone. The “Provider Pyramid,” where half your app lives inside overlapping contexts, is the new callback hell. Everyone’s chasing global state convenience, but context isn’t a silver bullet. It’s a scalpel: powerful when used precisely, disastrous when overapplied.

Developers often wrap everything in context because it feels like shared state nirvana. But each provider introduces complexity. Debugging nested contexts becomes an archeological dig through useContext calls. Performance suffers because re-renders cascade through the hierarchy.

The truth is, most data doesn’t need to be global.

And no, switching to Zustand won’t magically fix that. You’re still synchronizing state at the wrong granularity. Not to mention, if you’re running instances then container security is another thing you have to worry about and take seriously. It’s safe to say it’s not the easiest kerfuffle I’ve found myself in.

The truth is, most data doesn’t need to be global. A shopping cart? Sure. Theme preferences? Maybe. But that “currently selected tab” or “temporary filter” state? Keep it local. The moment you globalize everything, you’ve lost control of your mental model. React encourages local reasoning — respect that boundary.

Why Redux Wasn’t the Villain You Thought It Was

Redux became the punching bag of React fatigue; but in hindsight, it wasn’t the villain. It just made your architecture honest. Redux forced developers to think about data flow, action semantics and immutability. That discipline was painful, but it exposed where logic actually lived. The real issue wasn’t Redux; it was how teams abused it.

Many used Redux as a dumping ground for every variable — from authentication to whether a modal was open. The result was a global spaghetti bowl of actions and reducers no one understood. Then came the wave of “Redux is too complex” think pieces, conveniently ignoring that the complexity came from treating Redux like a database, not a coordination layer.

Modern tools abstract away the boilerplate, but they don’t remove the need for mental discipline.

Modern tools abstract away the boilerplate, but they don’t remove the need for mental discipline. Whether you’re using Zustand, MobX, or React Query, the same principle applies: state belongs where it’s most meaningful. Global state should be the exception, not the default. You don’t need fewer libraries; you need fewer excuses.

The Mirage of Simplicity in React Hooks

React hooks were supposed to simplify things. Instead, they became a new hiding place for architectural sins. Custom hooks are great for abstraction, but when you start nesting them like Russian dolls, you’re creating invisible coupling. Each use hides dependencies and timing issues that only surface in production — when your component tree starts acting possessed.

The seductive thing about hooks is that they feel composable. But composition without discipline is just chaos in layers. The mental cost of understanding where state changes originate multiplies fast. You end up with a dozen hooks sharing state in slightly different ways — each re-render triggering the others like dominoes.

Simplicity isn’t about fewer lines of code; it’s about predictability. The fewer mental hops between cause and effect, the saner your app will be. Before you write another useGlobalStore, ask if your hook really needs to exist. Most of the time, you can solve it with props and a clear hierarchy.

How to Scale Your React App Without Losing Your Mind

Every React project starts clean. Then reality hits: more features, more components, more developers. Suddenly, state’s flowing like an unregulated river. That’s when teams panic and bring in a new library. But scaling isn’t about tools — it’s about patterns.

Colocate state with the components that use it. Pass data down deliberately, not reflexively. Use derived state instead of duplicating sources of truth. Split context providers by domain, not convenience. These principles aren’t trendy; they’re timeless. You can scale a React app without turning it into a dependency labyrinth if you treat architecture as a living system, not a patchwork.

Even at scale, most React chaos comes from neglecting fundamentals.

Even at scale, most React chaos comes from neglecting fundamentals. Don’t reach for complexity when clarity will do. The frameworks evolve, the syntax changes, but the laws of clean architecture never go out of style. React doesn’t demand perfection — just consistency.

The Framework Isn’t the Problem, Your Architecture Is

Blaming React for state headaches is like blaming your car for bad driving: why not just switch cars and stop complaining? The framework does exactly what you tell it to do. If your components are thrashing, your context layers overgrown, or your hooks indistinguishable from black magic, that’s on you.

React is opinionated about one thing: data flows down. Everything else — side effects, synchronization and caching — is your responsibility. That’s not a bug; it’s a feature. It forces you to build with intention. When you abdicate that responsibility to whatever’s trending on GitHub, you trade understanding for temporary relief.

Frameworks don’t create chaos; developers do.

You don’t need to rewrite your app in Solid, Svelte, or Vue. You need to stop duct-taping abstractions onto architecture you never fully designed. Frameworks don’t create chaos; developers do. Once you accept that, React stops being a pain and starts being a partner.

Conclusion

React isn’t broken. Your architecture is. The endless cycle of swapping libraries, reinventing patterns and blaming the framework only masks the truth: state management is hard because thinking clearly is hard.

The solution isn’t another hook or global store; it’s humility and discipline. Understand how your data flows, design your state intentionally, and React will stop feeling like an adversary. Stop blaming React for your hangover. You poured the drinks.

TRENDING STORIES
Alexander Williams is a full stack developer and technical writer with a background working as an independent IT consultant and helping new business owners set up their websites.
Read more from Alexander T. Williams
SHARE THIS STORY
TRENDING STORIES
SHARE THIS STORY
TRENDING STORIES
TNS DAILY NEWSLETTER Receive a free roundup of the most recent TNS articles in your inbox each day.
The New Stack does not sell your information or share it with unaffiliated third parties. By continuing, you agree to our Terms of Use and Privacy Policy.