Your app has gotten complex. You have props drilling through 47 components. You're using Context for everything and re-rendering your entire app on every keystroke. You've discovered Zustand, Jotai, Valtio, and Recoil, and now you're paralyzed by choice.
Just fucking use Redux.
"But Redux has too much boilerplate!" you cry, still copy-pasting your Context providers into a 300-line file. Redux Toolkit exists. It's literally one line:
const store = configureStore({ reducer: { counter: counterReducer } })
"But I heard Redux is dead!" Dead? It has 61.4K stars on GitHub and is maintained by the React team. Your favorite new state library has 47 stars and was last updated "8 months ago."
"But what about server state?" Use Redux Toolkit Query. It's built in. It does everything React Query does, plus it integrates with your Redux DevTools so you can actually debug your app instead of console.logging like a caveman.
Live Demo: Redux Being Redux
This counter uses actual Redux (via CDN, proving it works anywhere). Imagine this state needed to be shared across 15 components, persisted to localStorage, time-travel debugged, and logged to your analytics. That's when you...
(just fucking use Redux)
"But it's 2025!" Yeah, and Redux Toolkit came out in 2019. You know what else is old? React. HTTP. JavaScript. Age doesn't mean shit if it works.
Look, I get it. You want to be cool. You want to use the new hotness. But you know what's actually cool? Shipping features. Debugging your app in 30 seconds instead of 30 minutes. Having a patterns that your entire team already knows.
Just. Fucking. Use. Redux.
Your app will thank you. Your coworkers will thank you. Your future self, debugging a race condition at 2am, will especially thank you.
Fine, you want alternatives?
- Zustand - Actually pretty good. Small API. Use this if you really can't stomach Redux.
- Jotai - Atoms are neat. Good for small apps. Gets weird at scale.
- MobX - It's fine. The magic can bite you. Redux is explicit.
- XState - For when your state is literally a state machine. Overkill otherwise.
- Context + useReducer - This is just Redux with extra steps and worse DevTools.
But honestly? For most apps with complex state needs?
Just use Redux Toolkit.