React vergleicht jede Dependency mit ihrem Wert aus dem vorherigen Render per Object.is und führt den Effect nur dann erneut aus, wenn sich etwas geändert hat. Ein leeres Array heißt einmal nach dem Mount, gar kein Array heißt nach jedem Render. Schief geht es, wenn du eine Dependency weglässt und einen veralteten Wert einfängst, oder wenn du ein Objekt beziehungsweise eine Funktion reinschreibst, die bei jedem Render neu entsteht, womit der Effect endlos schleift.
Warum Interviewer das fragen
In Effects wohnen die meisten React-Bugs, der Interviewer testet also, ob du Closures und Render-Snapshots verstehst, statt das Array als Zauberformel zu behandeln. Er will hören, dass du die Lint-Regel nicht stummschaltest, dass du den Unterschied zwischen einer Stale Closure und einer Endlosschleife benennen kannst und idealerweise, dass du hinterfragst, ob der Effect überhaupt existieren muss.
So baust du deine Antwort auf
- Erklär den Vergleich und wann der Effect wirklich erneut läuft.
- Beschreib die zwei Klassiker: Stale Closure und Render-Schleife.
- Sag, wie du beides fixt, mit funktionalen Updates, Refs oder Hochziehen.
- Schließ damit ab, ob der Effect überhaupt dorthin gehört.
Beispielantwort
React behält das Array aus dem letzten Render und vergleicht jeden Eintrag per Object.is. Passt alles, überspringt es den Effect. Weicht etwas ab, läuft erst das Cleanup des alten und dann der neue. Der Haken ist, dass der Effect die Props und den State aus dem Render einschließt, der ihn erzeugt hat. Lasse ich also etwas aus dem Array weg, arbeite ich mit einem Wert, der leise veraltet. Die andere Seite ist, ein Objekt oder eine Arrow-Funktion reinzuschreiben, denn das sind bei jedem Render neue Referenzen, und der Effect läuft in einer Schleife. Meine üblichen Fixes sind funktionale State-Updates, damit ich den aktuellen Wert nicht als Dependency brauche, Konstanten aus der Komponente rausziehen und einen Callback nur dann einpacken, wenn er wirklich Dependency sein muss. Ehrlich gesagt frage ich aber zuerst, ob der Effect überhaupt sein muss. Die meisten Effects, die ich gelöscht habe, haben abgeleiteten State berechnet, was einfach eine Rechnung während des Renders ist, oder Daten geholt, die in den Router oder eine Query-Library gehören.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie gehst du mit einem Effect um, der den aktuellsten Wert braucht, aber bei dessen Änderung nicht neu laufen soll?
- Wann würdest du stattdessen useLayoutEffect nehmen?
- Was läuft zuerst, das Cleanup des alten Effects oder der neue Effect?
Weitere Fragen für React-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen