Startseite / Artikel / React-Interviewleitfaden: Hooks, Rendering und was große Unternehmen fragen

React-Interviewleitfaden: Hooks, Rendering und was große Unternehmen fragen

Virtual DOM, Fallstricke bei Hooks, Leistung, Zustandsverwaltung, React 18, Live-Code-Übungen und wie man die Gründe für erneute Darstellungen erklärt.

1332 Wörter

In großen Unternehmen werden bei React-Interviews selten die Fähigkeiten im Auswendiglernen von Dokumenten bewertet. Stattdessen wird geprüft, ob man versteht, was im Hintergrund abläuft – warum ein Component neu gerendert wird, warum ein Effect zweimal ausgelöst wird, warum eine State-Änderung nicht sofort sichtbar ist. Kandidaten, die erklären können, warum, schneiden besser ab als solche, die nur wissen, wie.

Im Folgenden sind die üblichen Themen aufgelistet: Grundlagen, Hooks, Leistung, Muster sowie die unerwarteten Fragen, die überall auftauchen.

1. Kerngrundlagen

Die Einstiegsfragen beinhalten fast immer:

  • Virtual DOM – was das ist und warum Updates schneller wirken (Differenzierung/Abgleich anstelle von direkten DOM-Einschreibungen).
  • Reconciliation – wie React entscheidet, was aktualisiert werden soll (Keys, Überprüfung des Elementtyps).
  • JSX – eine Abkürzung, die in React.createElement() übersetzt wird; das muss man kennen.
  • Kontrolliert vs. unkontrolliert — kontrollierte Eingaben folgen dem React-State (value + onChange); unkontrollierte lesen den DOM über Refs.
  • Props vs. State — Props sind von oben her nur für Lesezugriff verfügbar; State ist lokal und wird über Setter/Hooks geändert.
  • Listenschlüssel — Der Einsatz des Index als Schlüssel führt zu Fehlern, wenn sich die Reihenfolge ändert (falsche Wiederverwendung von DOM/State).
  • Trickfrage: „Warum nicht den Array-Index als Schlüssel verwenden?“ Beantworten Sie mit einem konkreten Beispiel für eine Umordnung/Einfügung, bei dem React den State an die falsche Zeile bindet.

    2. Hooks (der umfangreichste Teil im Vorstellungsgespräch)

    useState

    • Aktualisierungen erfolgen asynchron/batchweise.
    • Veraltete Schließungsfunktionen: Mehrere Aufrufe von setCount(count + 1) innerhalb eines Events teilen sich denselben count; setCount(prev => prev + 1) behebt dieses Problem.

    useEffect

    • Abhängigkeiten: [] einmal, bei jeder Darstellung weggelassen, werden Abhängigkeiten nur aufgeführt, wenn sich diese ändern.
    • Zeitpunkt und Zweck der Bereinigung (Lecks, Abbestellung von Abonnements/Aufrufen).
    • Warum Effekte in der Entwicklung zweimal ausgeführt werden – Der Strict Mode von React 18 ruft die Funktionen zweimal auf, um fehlende Bereinigungen aufzudecken. Fast jeder stößt dabei einmal darauf.

    useMemo vs useCallback

    • useMemo speichert einen Wert; useCallback speichert die Identität einer Funktion.
    • Sowohl Funktionen schützen die referentielle Gleichheit für Kinderkomponenten von React.memo oder Abhängigkeitsarrays.
    • Übermäßiger Gebrauch hat Kosten; Interviewer freuen sich, zu hören, dass Memoisierung nicht kostenlos ist.

    useRef

    • Veränderlicher Wert über mehrere Darstellungen hinweg ohne Neudarstellung.
    • DOM-Node, vorherige Werte, Timer-IDs.

    useContext

    • Beendet das Bohren von Eigenschaften für einen Unterbaum.
    • Achtung: Ein Kontext-Update lädt alle Verbraucher im Unterbaum erneut, einschließlich solcher, die nur ein Feld lesen.

    useReducer

    • Wählen Sie dies, wenn die Logik komplex ist oder mehrere Felder gleichzeitig aktualisiert werden (lokalisierte, redux-ähnliche Reducer).

    Custom Hooks

    • Sie sollten bereit sein, useDebounce, useFetch oder useLocalStorage direkt zu schreiben – das gehört zu den häufigsten praktischen Übungen.

    3. Darstellung und Leistung

    In den mittleren/oberen Stufen trennen sich hier die Geister.

    • Warum wird neu gerendert? Aufgrund eines Neurenderns des Elternteils, eines Zustandswechsels, eines Kontextwechsels oder von Eigenschaften, die gleich aussehen, aber neue Referenzen sind.
    • React.memo – oberflächliche Vergleich der Eigenschaften; nutzlos, wenn Sie jedes Mal neue Objekte/Funktionen übergeben (kombinieren mit useMemo/useCallback).
  • Code Splitting — React.lazy + Suspense.
  • Virtualisierung — Virtualisierung im Stil von react-window für sehr große Listen.
  • — State nach unten verschieben, Kontexte trennen, gezielt memoisieren.
  • Profiler — Messen anstelle von Raten.
  • Klassische Herausforderung: Eine Liste mit 10.000 Zeilen wird beim Eingeben in das Suchfeld langsam. Man sollte auf Debouncing, Virtualisierung sowie memoisierte Zeilen zurückgreifen.

    4. State-Management

    • Lokaler vs globaler vs Server-State — Die getrennte Benennung von Server-States (Cache, Neuvalidierung, Lade-/Fehlerzustand) im Gegensatz zum UI-State beeindruckt die Entscheider.
    • Context vs Redux/Zustand — Context für seltene globale Daten (Theme, Authentifizierung); Redux/Zustand, wenn man Middleware, Tools, komplexe Updates oder häufige Schreibvorgänge ohne Probleme durch Context-Überlastung benötigt.
    • React Query / SWR / TanStack Query – Caching, Hintergrundabruf neu, Deduplizierung, damit man nicht erneut den useEffect-Fetch-Code entwickeln muss.
    • Grundlagen von Redux (falls die Technologiestack verwendet wird): Actions, Reducer, Store, thunk/saga-Middleware, reine Reducer.

    5. Designmuster

    • HOCs – Ein Komponente umhüllen; klassisches Beispiel withAuth.
    • Render-Props – Logik über eine Funktionsprop teilen; meist durch Hooks ersetzt, aber konzeptionell immer noch relevant.
    • Komponenten mit zusammengesetzter Struktur – Geschwisterkomponenten teilen impliziten Zustand über Context (Select / Select.Option).
    • Container-/Präsentationskomponenten – Daten versus UI; mit Hooks weniger streng vorgegeben, doch die Trennung der Aufgaben bleibt wichtig.
    • Komposition statt Vererbung – Reacts bevorzugte Vorgehensweise zur Wiederverwendung; seien Sie bereit, sie zu rechtfertigen.

    6. Lebenszyklus einer Klasse (immer noch gefragt)

    Unternehmen, die Hooks bevorzugen, untersuchen weiterhin grundlegende Konzepte oder veraltete Codebasen.

    • componentDidMount ≈ useEffect(() => {}, [])
    • componentDidUpdate ≈ Effect-Funktion mit Abhängigkeiten
    • componentWillUnmount ≈ Aufräumen von Effect-Funktionen
    • Fehlergrenzen – nur in Klassen möglich (componentDidCatch / getDerivedStateFromError); Hooks haben keinen Äquivalent, weshalb Wrapper wie react-error-boundary existieren.

    7. Kenntnisse zu React 18+

    • Konkurrenzloses Rendering – unterbrechbare Aufgaben für eine reaktionsfähigere Benutzeroberfläche.
    • useTransition – Markierung weniger dringender Aktualisierungen, damit das Tippen weiterhin schnell bleibt.
    • useDeferredValue – verzögert die Anzeige nicht kritischer Benutzeroberflächen.
    • Automatisches Batching – gruppiert Operationen innerhalb von Promises, Timeout-Funktionen und nativen Handlern (nicht nur React-Handlern).
    • Suspense für Daten – besonders relevant bei Next.js/Remix-basierten Architekturen.
    • Server Components – was wo ausgeführt wird und warum die Client-Bundles kleiner werden.

    8. JavaScript, das heimlich eindringt

    • Closures – veralteter Hook-Zustand.
    • Event-Loop / Mikro- vs. Makrotasks – warum Batching so funktioniert, wie es funktioniert.
    • this-Binding – falls Klassen verwendet werden.
    • Debounce vs. Throttle – fast immer empfohlen, oft im Zusammenhang mit „Optimierung dieses Suchfeldes“.
    • Flaches vs. tiefes Vergleichen – React.memo / useMemo und warum Objektliteralen die Memoisierung verhindern.
    • Promises / async-await – Rennen beim Abrufen von Daten, wenn Benutzer schnell tippen.

    9. Testing

    • Testing Library – Verhalten statt Interna (Abfragen nach Rolle/Text).
    • Jest – Mocking von APIs; Kenntnis der Snapshots-Beschränkungen.
    • Unit-Tests, Integrationstests und E2E-Tests sowie der übliche Platz für Komponententests.

    10. Wiederholte Live-Coding-Sessions

    • Debounced Suchfunktionen/Autocomplete
    • Kundenspezifisches useFetch mit Statusen für Ladevorgang/Fehler/Daten
    • Unendliches Scrollen oder Paginierung
    • Modale Fenster über Portalen (createPortal) und warum Portalen notwendig sind (Vermeidung von Überlauf/z-Index bei Beibehaltung der Reaktionsstruktur für Ereignisse/Kontext)
    • Zähler mit Undo/Redo mithilfe von useReducer
    • „Fehler finden“ durch veraltete Schließfunktionen oder fehlende Abhängigkeiten

    Beispielaufschlüsselung

    „Warum führt dieser useEffect zu einem Endlosschleifen?“

    useEffect(() => {
      setData({ ...data, updated: true });
    }, [data]);
    

    Klare Antwort: Der Effekt listet data als Abhängigkeit auf und schreibt anschließend ein neues Objekt wieder in data zurück, wodurch sich bei jedem Ausführungsvorgang die Abhängigkeit ändert und der Effekt sofort erneut ausgelöst wird. Die Lösung besteht darin, data von den Abhängigkeiten zu entfernen, wenn keine erneute Auslösung erforderlich ist, die Aktualisierung außerhalb des Effekts durchzuführen oder einen funktionalen Aktualisierer mit engeren Abhängigkeiten zu verwenden.

    Das Erklären von warum es zu Fehlverhalten kommt – anstatt nur einen Patch vorzuschlagen – ist es, was starke Antworten in React-Interviews auszeichnet.

    Fazit

    Tiefe ist wichtiger als das auswendig gelernte Grundwissen einer API. Die Interviewer interessieren sich für das Renderverhalten, Closures sowie Leistungsabwägungen – also die Fehler, die in der Produktion auftauchen. Bereiten Sie sich vor, indem Sie kleine Komponenten erstellen, die absichtlich Fehler aufweisen (veraltete Closures, fehlende Abhängigkeiten, überflüssige Neuerstellungen), und diese beheben. Genau dieses Fähigkeit zum Debuggen wird bei den Interviews wirklich bewertet.

    Üben Sie, indem Sie sich wie bei einem Interview eine Zeitvorgabe setzen: Erklären Sie den Virtual DOM in sechzig Sekunden, fügen Sie anschließend einen Codeausschnitt mit veralteten Closures zum Debuggen hinzu und skizzieren Sie schließlich eine verzögerte Suchfunktion. Diese Abfolge entspricht dem tatsächlichen Ablauf in den Interviews.

    Wie Panels normalerweise eskalieren

    Die Aufwärmübungen beinhalten den Virtual DOM, kontrollierte Eingaben und Tasten. In den mittleren Stufen kommen Hooks zum Einsatz: gebündelte Aktualisierungen, doppelte Effekte im Strict Mode, Vergleich zwischen Memoisierung und Callbacks sowie das Schreiben eines eigenen Hooks live. In den fortgeschrittenen Stufen geht es um Leistungsaspekte – Listen mit zehntausend Zeilen, Context-Probleme, Beweise aus dem Profiler – sowie um Architekturentscheidungen zwischen Context, Redux/Zustand und TanStack Query für Server-Zustände.

    Führen Sie ein persönliches „absichtlich kaputtes“ Repository: einen Zähler für veraltete Schließungen, einen Effekt mit fehlenden Abhängigkeiten, eine gememoisierte Liste, die aufgrund von inline-Objekten dennoch neu gerendert wird, sowie ein Portal-Modal. Das Vorlesen der Erklärungen zu diesen vier Fehlern umfasst einen überraschend großen Teil der Zeit, die für Live-Programming und Whiteboard-Sessions benötigt wird.

    Falls die Stelle React 18+ erwähnt, sollten Sie jeweils einen Satz zu konkurrierendem Rendering, Übergängen, verzögerten Werten, automatischem Bündeln und Server Components parat haben. Tiefe Kenntnisse zu einer konkreten Implementierung sind besser als vage Kenntnisse aller RFCs.