Streaming i React 18: Sådan fungerer renderToPipeableStream
Forstå, hvordan renderToPipeableStream gradvist sender HTML-chunks, før alle asynkrone data er indlæst.
Streaming i React 18: Sådan fungerer renderToPipeableStream er en gratis React Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Før React 18: Den synkrone flaskehals
Før React 18 brugte serverside-gengivelse renderToString, som er synkron: React gengiver hele komponenttræet til en streng, før der sendes HTML til browseren. Hvis en komponent indlæser data, skal serveren vente på alle data, før den første byte når frem til brugeren.
React 18: renderToPipeableStream
React 18 introducerede renderToPipeableStream, som gengiver komponenttræet som en strøm af HTML-fragmenter. I stedet for at vente på, at alt er klar, sender React HTML, efterhånden som hver del af træet bliver færdig, så browseren straks kan begynde at gengive det synlige indhold.
Anatomien: pipe og abort
renderToPipeableStream returnerer et objekt med to metoder: pipe(writable) og abort(). pipe accepterer en Node.js Writable-strøm (typisk HTTP-svaret) og begynder at sende HTML til den. abort() annullerer strømmen og bruges, når anmodningen annulleres, eller en tidsgrænse overskrides.
Hvad der sendes først: Skallen
Strømmen begynder med HTML-skallen — alt det indhold, der ikke blokeres af en ventende Suspense-grænse. Det omfatter dokumentets head, navigation, sidefod, layoutets faste ramme og alt indhold, der er tilgængeligt synkront. Skallen sendes straks, før datakrævende komponenter er færdigbehandlet.
Suspense-reservevisninger i strømmen
Komponenter inde i Suspense-grænser, der venter på data, sendes først som deres reservevisning (f.eks. en indlæsningsindikator). React sender senere et script-tag, der erstatter reservevisningen med det færdigbehandlede indhold — uden en ny gengivelse af skallen på klientsiden.
bootstrapScripts til hydrering på klientsiden
Send bootstrapScripts: ['/static/js/client.js'] til renderToPipeableStream for at fortælle React, at der skal indsættes et script-tag i slutningen af strømmen. Browseren indlæser denne pakke og kalder hydrateRoot, som tilknytter Reacts hændelseshandlere til den serverrenderede DOM.
onShellReady: Det rigtige tidspunkt at pipe
onShellReady udløses, når HTML-skallen (alt uden for ventende Suspense-grænser) er klar til at blive sendt. Det er det rigtige tidspunkt at kalde pipe(res) — men det er vigtigt at angive HTTP-statuskoden og svarheaderne, før du kalder pipe, fordi strømleveringen fastlåser HTTP-statuskoden.
Indstilling af headere før streaming
Da streaming begynder med det samme, når du kalder pipe(), skal alle tildelinger til res.setHeader eller res.statusCode ske før kaldet til pipe. Et almindeligt mønster er at sætte status til 200 og Content-Type: text/html i callback-funktionen onShellReady og derefter kalde pipe(res) med det samme.
onShellError: Fatale fejl før skallen
onShellError udløses, når der opstår en fejl, som ikke kan genoprettes fra, før skallen er færdig med at blive gengivet — for eksempel hvis en komponent på øverste niveau kaster en fejl uden for en Suspense-grænse. I dette tilfælde kan du ikke streame et delvist svar. Omdiriger i stedet til en fejlside, eller send et statisk HTML-dokument med fejl.
onAllReady: Til botter og crawlere
onAllReady udløses, når hele React-træet er færdigbehandlet — inklusive alle Suspense-grænser. For søgemaskinerobotter og tjenester, der viser forhåndsvisninger af links på sociale medier, vil du sende den komplette HTML uden streaming. Kontrollér, om forespørgslen kommer fra en bot, og kald pipe(res) i onAllReady i stedet for onShellReady.
Fejlhåndtering under streaming
onError udløses ved fejl i Suspense-grænser — React kan stadig streame resten af siden, mens den pågældende grænse viser sin fejlvisning. Brug onError til at logge fejlen i din overvågningspipeline uden at afbryde streamingen for brugeren.
onAllReady sammenlignet med onShellReady
Hvornår bør du bruge onAllReady i stedet for onShellReady til at starte piping?
Opsummering af lektionen
renderToPipeableStream er React 18's primitive funktion til streamingbaseret SSR på Node.js-servere. Den streamer HTML-skallen med det samme via onShellReady, udfylder Suspense-grænser, efterhånden som data bliver klar, og hydrerer klienten via bootstrapScripts. Brug onAllReady til botter og crawlere, onShellError ved fatale fejl, og sæt altid HTTP-headere, før du kalder pipe().
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Streaming i React 18: Sådan fungerer renderToPipeableStream” gratis?
Ja — hele teksten til “Streaming i React 18: Sådan fungerer renderToPipeableStream” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Streaming i React 18: Sådan fungerer renderToPipeableStream”?
Forstå, hvordan renderToPipeableStream gradvist sender HTML-chunks, før alle asynkrone data er indlæst. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Streaming i React 18: Sådan fungerer renderToPipeableStream”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Streaming i React 18: Sådan fungerer renderToPipeableStream
- Suspense-grænser og streamingprioritet
- Progressiv hydration med selektiv hydration
- Måling af streamingeffekt: FCP, TTI og LCP