Redux solves the problem of "I have no fucking clue why this component updated when I clicked that button over there." It forces all state changes through a predictable flow: action → reducer → new state → component updates. Sounds simple, right? It is, once you get past the learning curve from hell.
The Core Concepts (That Will Confuse You for a Week)
Redux has three rules that seem obvious until you try to implement them:
- Single source of truth - All your state lives in one object tree. No more hunting through 47 different components to find where that user data is stored.
- State is read-only - You can't just mutate state directly. You have to dispatch an action. Yes, even for a simple counter increment. No, that's not overkill once your app gets complex.
- Changes are made with pure functions - Reducers take current state + action and return new state. No side effects, no API calls, no bullshit.
The Redux data flow goes: Component dispatches action → Store runs reducer → Store notifies components → Components re-render with new state. Every state change is traceable, which is why Redux DevTools can do time travel debugging.
Redux Toolkit: The Thing That Actually Fixed Redux
Redux used to require writing 50 lines of boilerplate to add a fucking counter. Redux Toolkit fixed that nightmare. RTK's `createSlice` generates action creators and reducers automatically, and `configureStore` sets up your store with sane defaults.
Before RTK: Writing action types, action creators, and reducers separately like some kind of masochist. Also praying you didn't typo your action type string because "INCREMENT"
vs "INCREMNET"
will make you question your career choices.
After RTK: Define your logic once in a slice, get everything generated for you.
Current Status: Redux Actually Doesn't Suck Anymore
Redux 5.0 and Redux Toolkit 2.0 were released on December 4, 2023, not some mythical "late 2024" date. The new versions include proper TypeScript support (finally), better ESM compatibility, and performance improvements.
Companies like Facebook still use Redux because migrating 50,000 components is harder than learning Kubernetes. I saw one team try to migrate away from Redux - 6 months later they gave up and went back after hitting a race condition bug that would've been trivial to debug with Redux DevTools. New projects can choose Redux Toolkit for the better developer experience, or alternatives like Zustand if they want simpler state management without the Redux ceremony.