React · Junior · Pytanie 14 z 75
Dlaczego komponent się nie przerenderował?
const [user, setUser] = useState({ name: "Ann" });
function rename() {
user.name = "Bob";
setUser(user);
}- 1
setUsernie można wywoływać w handlerach zdarzeń - tylko w efektach - ✓Poprawna odpowiedź: Obiekt został zmutowany, referencja jest ta sama -
Object.isnie widzi zmiany - 3W
useStatenie można przechowywać obiektów - tylko wartości prymitywne
Wyjaśnienie
React porównuje nową wartość ze starą przez Object.is. To ten sam obiekt, więc aktualizacja jest pomijana. Trzeba utworzyć nowy obiekt: setUser({ ...user, name: "Bob" }). Mutacja psuje też optymalizacje typu memo.