In Next.js kann die Art und Weise, wie clientseitige Komponenten („Client verwenden“) mit SSR (Server-Side Rendering) funktionieren, manchmal verwirrend sein. Lassen Sie es uns aufschlüsseln:
So funktionieren Client- und Serverkomponenten in Next.js:
-
Serverkomponenten: Dies sind die Standardkomponenten in Next.js und werden auf dem Server vorgerendert. Sie werden nicht als JavaScript, sondern nur als HTML an den Client gesendet.
-
Client-Komponenten: Wenn Sie eine Komponente mit „Client verwenden“ markieren, bedeutet dies, dass die Komponente auf der Client-Seite ausgeführt werden muss, da sie möglicherweise über Interaktivität verfügt (wie useState, useEffect). oder verlässt sich auf Browser-APIs, die in einer Serverumgebung nicht funktionieren.
Warum Client-Komponenten immer noch HTML auf dem Server rendern:
Auch wenn eine Komponente als „Client verwenden“ markiert ist, kann das ursprüngliche HTML für diese Komponente weiterhin auf dem Server (SSR) generiert werden, jedoch nur für statische HTML-Zwecke . Das bedeutet:
-
Erstes Rendern: Der Server generiert den HTML-Code für die Seite, einschließlich der Client-Komponenten, für bessere Leistung und SEO. Dies ist statisches HTML, nicht interaktiv.
-
Hydratisierung: Wenn dieser HTML-Code den Browser erreicht, hydratisiert Next.js die clientseitige Komponente mit JavaScript und ermöglicht so deren Interaktivität.
Warum das passiert:
-
Leistung: Durch das Rendern des anfänglichen HTML-Codes auf dem Server kann der Benutzer Inhalte schneller sehen (schnellere Zeit bis zum ersten Byte oder TTFB), ohne auf das Laden des clientseitigen JavaScripts warten zu müssen.
-
SEO: Das Vorrendern des HTML ist für SEO wichtig, da dadurch sichergestellt wird, dass Suchmaschinen den Inhalt crawlen und indizieren können.
-
Hydratisierung: Sobald der HTML-Code bereitgestellt ist, sendet Next.js das JavaScript-Bundle an den Client, der den statischen HTML-Code „hydratisiert“, Ereignis-Listener anhängt und ihn interaktiv macht.
Was passiert mit „Client verwenden“?
-
Serverseitiges HTML-Rendering: Auch wenn eine Komponente clientseitig ist, generiert Next.js dennoch HTML für die erste Ansicht. Es führt zwar kein interaktives JavaScript auf dem Server aus, sendet jedoch HTML-Markup an den Client.
-
Clientseitige Hydratation: Das für die Interaktivität benötigte JavaScript wird an den Client gesendet, und sobald die Seite geladen ist, hydratisiert Next.js die Komponente, sodass sie voll funktionsfähig ist.
Missverständnis:
Das Markieren einer Komponente mit „Client verwenden“ bedeutet nicht, dass sie kein serverseitiges HTML generiert. Es bedeutet lediglich, dass das interaktive JavaScript nur auf dem Client geladen wird, der Server jedoch möglicherweise weiterhin den anfänglichen statischen HTML-Code zum Rendern generiert.
Zusammenfassend:
-
SSR von Client-Komponenten: Der HTML-Code für Client-Komponenten kann auf dem Server vorgerendert werden (zum anfänglichen Laden), aber sie sind erst dann interaktiv, wenn sie auf dem Client hydriert sind.
-
"Client verwenden": Diese Anweisung stellt sicher, dass das JavaScript für die clientseitige Interaktivität nur im Browser ausgeführt wird, stoppt jedoch nicht die statische HTML-Generierung auf dem Server.
Wenn Sie sicherstellen möchten, dass sich die Komponente anders verhält, müssen Sie möglicherweise überdenken, wo und wie Sie bestimmte dynamische Inhalte laden, insbesondere wenn Sie clientspezifisches Verhalten erwarten (wie den Zugriff auf Fenster oder Dokumente).
Das obige ist der detaillierte Inhalt vonWarum werden Client-Komponenten in nextjs als SSR gerendert, obwohl die Markierung von Komponenten als „Client verwenden' ihren HTML-Code immer noch als SSR rendert, warum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!