React · Junior · Frage 14 von 75
Warum wurde die Komponente nicht neu gerendert?
const [user, setUser] = useState({ name: "Ann" });
function rename() {
user.name = "Bob";
setUser(user);
}- 1Das Objekt wurde mutiert, die Referenz ist also dieselbe
- 2In
useStatedürfen keine Objekte liegen, nur primitive Werte - 3
setUserdarf nicht in Event-Handlern aufgerufen werden, nur in Effekten
Antwort zeigen
Richtige Antwort: Das Objekt wurde mutiert, die Referenz ist also dieselbe
Erklärung
React vergleicht den neuen Wert mit dem alten per Object.is. Es ist dasselbe Objekt, also wird das Update übersprungen. Man muss ein neues Objekt erzeugen: setUser({ ...user, name: "Bob" }). Mutation macht auch Optimierungen wie memo kaputt.