How does normalized state shape work in Redux?
Answer
Normalized state stores entities as a dictionary (byId) keyed by their unique ID, plus an array of IDs for ordering. This avoids nested, duplicated data. Normalized: { users: { ids: [1, 2], entities: { 1: { id: 1, name: "Alice" }, 2: { id: 2, name: "Bob" } } } }. Benefits: O(1) lookup by ID, no data duplication, easy updates. RTK's createEntityAdapter provides this automatically: const usersAdapter = createEntityAdapter(); const usersSlice = createSlice({ name: "users", initialState: usersAdapter.getInitialState(), reducers: { usersReceived: usersAdapter.setAll, userAdded: usersAdapter.addOne, userUpdated: usersAdapter.updateOne } });. Built-in selectors: usersAdapter.getSelectors((state) => state.users) — provides selectAll, selectById, selectIds, selectTotal. Normalization is critical for state with deeply nested or frequently updated relationships. Without it, updating a user object buried in multiple places requires complex nested spreads.