Jeder Consumer rendert neu, sobald sich der Provider-Wert per Referenz ändert, egal welchen Teil des Werts er liest, denn Context hat keine Selektoren. Ein Provider mit einem großen Objekt, das bei jedem Render frisch gebaut wird, rendert also permanent alle Consumer neu. Fix ist: den Wert memoisieren, State und Dispatch in getrennte Contexts aufteilen oder die Daten in einen externen Store legen, den Consumer mit Selektoren abonnieren.
Warum Interviewer das fragen
Context ist die am meisten missbrauchte API in React, der Interviewer will also wissen, ob du den Schmerz kennst. Er hört darauf, dass du weißt: Es gibt keine partielle Subscription, und er will praktikable Gegenmaßnahmen statt eines pauschalen Verbots von Context. useSyncExternalStore oder eine kleine Store-Library zu erwähnen zeigt, dass du den Punkt kennst, an dem Context aufhört, das richtige Werkzeug zu sein.
So baust du deine Antwort auf
- Nenn die Regel: jede Wertänderung rendert alle Consumer neu.
- Erklär das Warum, es gibt keinen Selektor und verglichen wird per Referenz.
- Zähl die Fixes der Reihe nach auf: memoisieren, aufteilen, dann in einen Store.
- Sag, wofür Context wirklich gut ist, etwa stabile Konfiguration.
Beispielantwort
Context ist in erster Linie ein Mechanismus für Dependency Injection und erst mit weitem Abstand ein State-Manager. Das Performance-Problem ist, dass Consumer den ganzen Wert abonnieren. Ändert der Provider-Wert seine Identität, rendert alles darunter neu, auch eine Komponente, die nur ein einzelnes Boolean liest. Das Erste, was ich prüfe, ist, ob der Provider ein neues Objekt inline im JSX baut, denn das ist bei jedem Parent-Render eine neue Referenz und hebelt alles andere aus. Danach teile ich Contexts auf, denn meistens ändern sich die Daten häufig und die Setter nie, Dispatch in einen eigenen Context zu legen stoppt also den größten Teil des Rauschens. Brauche ich danach immer noch Selektoren, höre ich auf zu tun, als wäre Context ein Store, und lege den State in einen echten, den ich dann mit useSyncExternalStore oder einer Library abonniere, sodass jede Komponente sich ihren Ausschnitt zieht. Wo Context weiter hervorragend ist: bei stabilen Dingen, Theme, aktueller User, Locale, eine Client-Instanz. Die ändern sich praktisch nie, also sind die Re-Render-Kosten irrelevant.
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 umgeht useSyncExternalStore das Re-Render-Problem?
- Was passiert bei verschachtelten Providern desselben Contexts?
- Würdest du Context für Formular-State nehmen? Warum nicht?
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