Server Components laufen ausschließlich auf dem Server, zur Request- oder Build-Zeit, und ihr Code landet nie im Browser. Sie können direkt eine Datenbankabfrage awaiten, aber keinen State, keine Effects und keine Event-Handler nutzen. Client Components werden mit der Direktive use client markiert, hydraten im Browser und übernehmen die Interaktivität. Standard ist Server, und die Client-Grenze schiebst du so weit wie möglich nach unten im Baum.
Warum Interviewer das fragen
Arbeit mit dem App Router ist inzwischen Alltag, und viele Kandidaten haben nur darüber gelesen. Der Interviewer will wissen, ob du die Grenze verstehst: welcher Code tatsächlich im Browser landet, was die Serialisierungsgrenze überqueren darf und warum der Standard für die Bundle-Größe eine Rolle spielt. Er hört auch darauf, ob du den Kompositions-Trick kennst, servergerenderte children in eine Client Component zu reichen.
So baust du deine Antwort auf
- Fang damit an, wo beides läuft und was im Browser landet.
- Nenn die konkreten Grenzen: keine Hooks, keine Event-Handler, nur serialisierbare Props.
- Sag deinen Standard und den Auslöser für den Grenzübertritt.
- Erwähn, dass du servergerenderte children in eine Client-Hülle reichst.
Beispielantwort
Ich denke darüber so: Server Components sind fürs Daten holen und Markup rendern da, Client Components für alles, was der User anfasst. Eine Server Component läuft auf dem Server, ich kann also direkt darin eine Query awaiten, und weder dieser Code noch seine Dependencies landen im Browser-Bundle. Der Preis ist: kein useState, kein useEffect, kein onClick. Sobald ich eins davon brauche, schreibe ich use client an den Anfang der Datei, und alles, was sie importiert, wandert mit ins Client-Bundle. Mein Standard ist also Server, und ich schiebe die Grenze so weit runter wie möglich. In meinem letzten Projekt hatte ich ein Dashboard, bei dem nur das Filter-Dropdown und der Chart-Tooltip interaktiv waren, das waren zwei kleine Client Components, und der Rest der Seite inklusive eines ziemlich schweren Markdown-Renderers blieb auf dem Server. Worüber Leute stolpern: Props, die die Grenze überqueren, müssen serialisierbar sein, du kannst also keine Funktion nach unten reichen. Das Pattern, das ich stattdessen nutze, ist servergerenderte children in eine Client-Hülle zu reichen.
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
- Was kannst du als Props über die Grenze vom Server zum Client geben?
- Wie teilen sich zwei Client Components in verschiedenen Teilen einer servergerenderten Seite State?
- Was passiert, wenn du ein reines Server-Modul in eine Client Component importierst?
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