Blog>
Snippets

Implementing Memoized Selectors in Redux Toolkit 2.0

Exemplify creating memoized selectors with Redux Toolkit 2.0, utilizing reselect or createSelector for optimized state selection and minimal re-rendering.
import { createSelector } from '@reduxjs/toolkit';

// Assume we have a state with a users slice containing a list of users
const selectUsers = state => state.users.list;

// Now we create a memoized selector using createSelector
// This selector will not recompute as long as the list of users doesn't change.
export const selectUserNames = createSelector(
    [selectUsers],
    (users) => users.map(user => user.name)
);
This snippet defines a basic memoized selector using Redux Toolkit's createSelector function. It takes the current list of users from the state and maps it to an array of user names. As long as the list of users does not change, the selector will not recompute, thus avoiding unnecessary re-rendering.
import { createSlice } from '@reduxjs/toolkit';

// Example of a slice of state for storing users
export const usersSlice = createSlice({
    name: 'users',
    initialState: {
        list: []
    },
    reducers: {
        // Reducers here
    }
});

// Automatically generated selectors for the state slice
// Can be used directly in components or in combination with other selectors
export const { selectAll: selectAllUsers } = usersSlice.getSelectors(state => state.users);
This snippet shows how to use automatically generated selectors from a createSlice function. By using the getSelectors method and passing a selector that receives the entire state and returns the state slice of interest, you create a set of selectors for your slice, such as selectAllUsers, which can be directly used in components or combined with other selectors.