Blog>
Snippets

Correcting Immutable Update Mistakes

Offer a code snippet demonstrating common mistakes when updating state immutably in TanStack Config and provide the corrected approach using techniques like the spread operator or utilities from libraries like Immer.
// Incorrect way to update an array in the state
state.todos.push(newItem);
This code directly mutates the existing state by pushing a new item into the todos array. Direct mutation of state in reactive frameworks or libraries can lead to bugs, as changes might not be detected, leading to UI inconsistencies.
// Correct way using spread operator
return {
    ...state,
    todos: [...state.todos, newItem]
};
This code correctly creates a new state object, preserving immutability. By spreading the original state and todos array, it ensures that changes are detected, and UI updates as expected. This method prevents direct mutation of the state.
// Incorrect way to update a nested object in the state
state.user.profile.name = 'New Name';
This example again shows direct mutation of the state by altering a nested property directly. Such mutations are hard to track and can lead to unpredictable rendering behavior.
// Correct way using spread operator for nested updates
return {
    ...state,
    user: {
        ...state.user,
        profile: {
            ...state.user.profile,
            name: 'New Name'
        }
    }
};
This approach correctly updates a nested property within the state without directly mutating it. By spreading each level of nested objects, we ensure that the state's immutability is preserved and changes are accurately reflected in the UI.