Выбор ответа Junior Рендер и reconciliation спрашивают часто обновлено
Мутация объекта в state
Вопрос
Почему после клика имя на экране не меняется?
const [user, setUser] = useState({ name: 'Аня' });
function rename() {
user.name = 'Оля';
setUser(user);
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Объект изменён по месту: ссылка та же, обновления нет. React сравнивает новое и старое значение через Object.is.
Варианты ответа
setUserасинхронный, имя обновится на следующий клик- Нужно вызвать
forceUpdateпосле изменения объекта - Объект изменён по месту: ссылка та же, обновления нетправильный ответ
- State-объекты нельзя хранить в
useState, только примитивы
Разбор
React сравнивает новое и старое значение через Object.is. Ссылка та же, значит обновления нет. Нужен новый объект: setUser({ ...user, name: "Оля" }). Асинхронность тут ни при чём, следующий клик тоже ничего не покажет. forceUpdate есть только у классов. Объекты в useState хранить можно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.