Проверяет понимание важности иммутабельного обновления состояния в React и последствий прямой мутации.
В React состояние (state) должно обновляться иммутабельно, то есть созданием нового объекта или массива, а не изменением существующего. Прямая мутация, например, через push или изменение элемента по индексу, приводит к тому, что ссылка на объект состояния остается прежней. React использует сравнение ссылок (shallow comparison) для определения изменений, поэтому при мутации он не обнаруживает изменений и не запускает повторный рендер компонента.
React.memo и PureComponent, которые оптимизируют рендер на основе сравнения пропсов и состояния.useEffect с зависимостями от состояния, не срабатывают, так как ссылка не изменилась.Вместо мутации нужно создавать новый массив. Например, для добавления элемента используйте concat или spread-оператор, для удаления — filter, для обновления — map.
// Неправильно (мутация)
const addItem = (item) => {
state.push(item);
setState(state);
};
// Правильно (иммутабельно)
const addItem = (item) => {
setState([...state, item]);
};
// Обновление элемента
const updateItem = (id, newValue) => {
setState(state.map(item => item.id === id ? { ...item, ...newValue } : item));
};
// Удаление элемента
const removeItem = (id) => {
setState(state.filter(item => item.id !== id));
};Иммутабельное обновление состояния — это фундаментальный принцип React, который обеспечивает предсказуемость, производительность и корректность работы оптимизаций. Всегда создавайте новые объекты и массивы при изменении состояния, чтобы избежать трудноуловимых багов и обеспечить правильный рендер.
Уровень
Рейтинг:
5
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию