Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: usestate, mutation

Почему useState не реагирует на мутацию объекта без смены ссылки?

Вопрос проверяет понимание того, как useState определяет, произошло ли изменение состояния.

Короткий ответ

useState сравнивает старое и новое значение по ссылке. Если ссылка не изменилась, React считает, что состояние осталось тем же самым. При мутации объекта ссылка остаётся прежней, поэтому ререндер не запускается. Чтобы React обновился, нужно создать новый объект.

Длинный ответ

Механизм useState напрямую связан с принципом иммутабельности.

Как React проверяет изменение state

Перед перечислением важно зафиксировать ключевую идею: React не делает глубокий анализ данных.

  1. React сравнивает старое и новое значение.

  2. Сравнение выполняется по ссылке (Object.is).

  3. Одинаковая ссылка → обновления нет.

Пример ошибки

const [user, setUser] = useState({ name: "Alex" });

// плохо
user.name = "Bob";
setUser(user); // ссылка та же → ререндер может не произойти

Правильный вариант

setUser((prev) => ({
  ...prev,
  name: "Bob",
}));
  1. Создаётся новый объект.

  2. Меняется ссылка.

  3. React запускает ререндер.

Вывод

useState не реагирует на мутацию без смены ссылки, потому что для React изменение состояния — это всегда замена значения, а не его модификация.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • React

    React

Ключевые слова

#usestate

#mutation

Подпишись на React Developer в телеграм