I spent two years putting everything in Redux. Global loading states, form inputs, toast notifications — all in the store. Then I ripped it all out in a weekend and my codebase got 40% smaller. Here's why you should too.
Redux was the right answer in 2018. It's the wrong answer in 2026 for 90% of projects. Let me explain.
The problem isn't Redux itself
Redux is well-built, well-documented, and battle-tested. The problem is that developers reach for it by default, like it's a required dependency for React apps. It's not.
What Redux actually costs you
Boilerplate tax. Even with Redux Toolkit (which is genuinely good), you're still writing slices, selectors, thunks, and connecting everything. For a todo app? That's absurd. For a dashboard with 5 API calls? Still overkill.
Bundle size. Redux + Redux Toolkit + React-Redux = ~40KB minified. Zustand is 1.1KB. That's not a typo.
Mental overhead. New developers on your team need to understand actions, reducers, dispatch, selectors, middleware, thunks, and the store. With Zustand, they need to understand... a hook.
// Redux way
const dispatch = useDispatch();
const count = useSelector((state: RootState) => state.counter.value);
dispatch(increment());
// Zustand way
const { count, increment } = useCounterStore();
Same result. One requires 4 files and 3 concepts. The other requires 1 file and 0 new concepts.
"But Redux DevTools!"
Zustand has devtools middleware. So does Jotai. This isn't a differentiator anymore.
"But Redux handles complex state!"
Define complex. If you have deeply nested state with dozens of interdependent slices, sure, Redux's structure helps. But how many apps actually have that? Most apps have:
- User auth state
- A few API caches
- Some UI state (modals, sidebars)
For API caching, you should be using TanStack Query or SWR anyway — not putting API responses in Redux. That alone eliminates 60% of what most Redux stores contain.
When Redux is still the right choice
- You have 50+ developers and need enforced patterns
- Your state is genuinely complex with many interdependent slices
- You're already using it and it's working fine (don't rewrite for fun)
- You need time-travel debugging for complex state transitions
What to use instead
Zustand — For most apps. Simple, tiny, just works. No providers, no boilerplate.
Jotai — For atomic state. Great when you have lots of independent pieces of state.
TanStack Query — For server state. If half your Redux store is API responses, replace that half with TanStack Query and you might not need Redux at all.
React Context — For truly simple shared state (theme, locale, auth). Don't use it for frequently updating state though — it re-renders everything.
The real question
Before adding Redux to your next project, ask: "What specific problem does Redux solve here that Zustand doesn't?"
If you can't answer that clearly, you don't need Redux. You need a smaller tool for a smaller problem.
Related resources
- React complete guide
Originally published at https://www.aimadetools.com
Top comments (0)