React · Junior · Запитання 14 з 75
Чому компонент не перемалювався?
const [user, setUser] = useState({ name: "Ann" });
function rename() {
user.name = "Bob";
setUser(user);
}- 1
setUserне можна викликати в обробниках подій - лише в ефектах - ✓Правильна відповідь: Об'єкт мутовано, посилання те саме -
Object.isне бачить змін - 3У
useStateне можна зберігати об'єкти - лише примітивні значення
Пояснення
React порівнює нове значення зі старим через Object.is. Це той самий об'єкт, тому оновлення пропускається. Треба створити новий об'єкт: setUser({ ...user, name: "Bob" }). Мутація ще й ламає оптимізації на кшталт memo.