Separating data by slice (really by reducer in Redux) leads to situations where one action needs to be responded to in different parts of the store. For example, if you delete a post, you must also delete its comments, which are in another slice.
In Redux, this was solved simply by adding to the switch
a reaction to the desired action by its name. In Redux Toolkit, this is no longer possible because of the strong link between reducers and actions. This is the price we pay for reducing code.
Redux Toolkit brings us the extraReducers
. mechanism to react to actions taking place in other slices. It works quite simply. The extraReducers
property is added to the slice, through which you can set reactions (reducers) to external actions:
// Import the actions you want to react to from other slices
import { removePost } from '../postsSlice.js';
const postCommentsAdapter = createEntityAdapter();
const initialState = postCommentsAdapter.getInitialState();
const postCommentsSlice = createSlice({
name: 'comments',
initialState: initialState,
reducers: {
// Ordinary reducers
},
extraReducers: (builder) => { // Optional reducers
// When you delete a post, you have to delete all its comments
builder.addCase(removePost, (state, action) => {
const postId = action.payload;
// Select all comments except the ones you want to delete
const restEntities = Object.values(state.entities).filter((e) => e.postId !== postId);
// setAll removes the current entities and adds new ones
postCommentsAdapter.setAll(state, restEntities);
});
},
});
// Somewhere in the application
dispatch(removePost(post.id));
Additional reducers are added as cases to the builder
object, modifying it directly. So we don't need to give anything back. Moreover, the builder
supports chains, which means we can call addCases one after another builder.addCase().addCase()...
.
The Hexlet support team or other students will answer you.
A professional subscription will give you full access to all Hexlet courses, projects and lifetime access to the theory of lessons learned. You can cancel your subscription at any time.
Programming courses for beginners and experienced developers. Start training for free
Our graduates work in companies:
From a novice to a developer. Get a job or your money back!
Sign up or sign in
Ask questions if you want to discuss a theory or an exercise. Hexlet Support Team and experienced community members can help find answers and solve a problem.