InterviewHubPRO
Section Overview
Q339

Question 339 of 445

Part 10: Modern React 18, React 19 & Next.js Patterns (317 - 353)

76%
React & Modern Frontend (445 Qs)•Part 10: Modern React 18, React 19 & Next.js Patterns (317 - 353)

How do you handle cross-slice communication?

Since each createSlice only manages its own piece of state, a few patterns let one slice react to actions or data from another:

  1. extraReducers: listen for another slice's action type without importing its reducer.
javascript
  const notificationsSlice = createSlice({
    name: "notifications",
    initialState: [],
    reducers: {},
    extraReducers: (builder) => {
      builder.addCase(postsSlice.actions.postAdded, (state, action) => {
        state.push({ message: `New post: ${action.payload.title}` });
      });
    },
  });
  1. Thunks that touch multiple slices: a single createAsyncThunk/thunk can dispatch actions belonging to several slices, or read getState() to combine data before deciding what to dispatch.
  2. Selectors that combine slices: a createSelector can take input selectors from different slices (e.g., posts + users) and join them together for the UI, without the slices knowing about each other.
  3. Listener middleware / sagas: createListenerMiddleware (RTK) or redux-saga's takeEvery can watch for an action dispatched by one slice and, in response, dispatch actions belonging to a completely different slice.

In all cases, slices stay decoupled — they communicate only through dispatched actions or shared selectors, never by directly importing and mutating each other's reducer state.