DEV Community

ZeeshanAli-0704
ZeeshanAli-0704

Posted on

FULL REDUX INTERNAL

Here is the COMPLETE internal Redux flow diagram + exact internal code that explains everything end-to-end exactly how Redux works under the hood.

I’m giving:

✅ ASCII Diagram (Very clear)
✅ Internal store implementation (exact how Redux behaves)
✅ Internal middleware pipeline code
✅ Internal react-redux subscription model
✅ Internal Redux Toolkit slice generator code (simplified)


🎯 1. FULL REDUX INTERNAL FLOW DIAGRAM

┌─────────────────────────────┐
│        Your Component        │
│   dispatch(action)           │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│        Store.dispatch        │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│      Middleware Chain        │
│ (logger → thunk → custom..) │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│           Reducer            │
│  newState = reducer(old, a)  │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│      Store Updates State     │
│    state = newState (new ref)│
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│ React-Redux Subscriptions   │
│  useSelector listeners       │
│  compare prev vs next        │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│     React Re-renders UI      │
└─────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

This is the entire lifecycle of Redux.


🧠 2. Internal Redux store implementation (simplified but accurate)

This is basically what Redux does internally:

// ------------------------------
// Mini Redux Implementation
// ------------------------------

function createStore(reducer) {
  let state = reducer(undefined, { type: "@@INIT" });
  let listeners = [];

  return {
    getState() {
      return state;
    },

    dispatch(action) {
      state = reducer(state, action);
      listeners.forEach((l) => l());
      return action;
    },

    subscribe(listener) {
      listeners.push(listener);
      return () => {
        listeners = listeners.filter((l) => l !== listener);
      };
    },
  };
}

function combineReducers(reducers) {
  return function rootReducer(state = {}, action) {
    const nextState = {};

    for (let key in reducers) {
      nextState[key] = reducers[key](state[key], action);
    }

    return nextState;
  };
}

// ------------------------------
// Example Reducers
// ------------------------------

function counterReducer(state = { value: 0 }, action) {
  switch (action.type) {
    case "INCREMENT":
      return { value: state.value + 1 };
    case "DECREMENT":
      return { value: state.value - 1 };
    default:
      return state;
  }
}

function userReducer(state = { name: "" }, action) {
  switch (action.type) {
    case "SET_NAME":
      return { name: action.payload };
    default:
      return state;
  }
}

// ------------------------------
// Combine reducers & create store
// ------------------------------

const rootReducer = combineReducers({
  counter: counterReducer,
  user: userReducer,
});

const store = createStore(rootReducer);

// ------------------------------
// Demo Usage
// ------------------------------

store.subscribe(() => {
  console.log("State updated:", store.getState());
});

store.dispatch({ type: "INCREMENT" });
store.dispatch({ type: "INCREMENT" });
store.dispatch({ type: "DECREMENT" });

store.dispatch({ type: "SET_NAME", payload: "Zeeshan" });


Enter fullscreen mode Exit fullscreen mode

Key points:

✔ createSlice auto-generates actions
✔ Reducer is wrapped in Immer → allows mutation (draft)
✔ RTK is just a convenience layer over raw Redux


🚀 Complete Internal Flow (Everything Connected)

Component dispatches an action
        │
        ▼
Middleware (optional)
        │
        ▼
Slice reducer (from createSlice)
        │
 Immer produces immutable newState
        │
        ▼
Redux store updates reference
        │
        ▼
React-Redux selector checks old vs new
        │
        ▼
If changed → re-render component
Enter fullscreen mode Exit fullscreen mode

thanks GPT

Top comments (0)