Вопрос проверяет понимание того, как useState определяет, произошло ли изменение состояния.
useState сравнивает старое и новое значение по ссылке. Если ссылка не изменилась, React считает, что состояние осталось тем же самым. При мутации объекта ссылка остаётся прежней, поэтому ререндер не запускается. Чтобы React обновился, нужно создать новый объект.
Механизм useState напрямую связан с принципом иммутабельности.
Перед перечислением важно зафиксировать ключевую идею: React не делает глубокий анализ данных.
React сравнивает старое и новое значение.
Сравнение выполняется по ссылке (Object.is).
Одинаковая ссылка → обновления нет.
const [user, setUser] = useState({ name: "Alex" });
// плохо
user.name = "Bob";
setUser(user); // ссылка та же → ререндер может не произойти
setUser((prev) => ({
...prev,
name: "Bob",
}));
Создаётся новый объект.
Меняется ссылка.
React запускает ререндер.
useState не реагирует на мутацию без смены ссылки, потому что для React изменение состояния — это всегда замена значения, а не его модификация.