React Academy · leksjon

Strømming i React 18: Slik fungerer renderToPipeableStream

Forstå hvordan renderToPipeableStream gradvis sender HTML-biter før alle asynkrone data er klare.

Leksjon 1 av 413 trinn

Strømming i React 18: Slik fungerer renderToPipeableStream er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Før React 18: Den synkrone flaskehalsen

Før React 18 brukte gjengivelse på serversiden renderToString, som er synkron: React gjengir hele komponenttreet til en streng før HTML sendes til nettleseren. Hvis en komponent laster inn data, må serveren vente på alle dataene før den første byten når brukeren.

React 18: renderToPipeableStream

React 18 introduserte renderToPipeableStream, som gjengir komponenttreet som en strøm av HTML-biter. I stedet for å vente til alt er klart, sender React HTML etter hvert som hver del av treet blir ferdig, slik at nettleseren kan begynne å gjengi synlig innhold umiddelbart.

Anatomien: pipe og abort

renderToPipeableStream returnerer et objekt med to metoder: pipe(writable) og abort(). pipe tar imot en Node.js Writable-strøm (vanligvis HTTP-responsen) og starter strømming av HTML til den. abort() avbryter strømmen og brukes når forespørselen avbrytes eller en tidsavbruddsgrense overskrides.

Hva strømmes først: HTML-skallet

Strømmen begynner med HTML-skallet – alt innhold som ikke blokkeres av en ventende Suspense-boundary. Dette omfatter dokumenthodet, navigasjon, bunntekst, layout-strukturen og alt innhold som er tilgjengelig synkront. Skallet strømmes umiddelbart, før noen datakrevende komponenter er ferdigbehandlet.

Suspense-fallbacks i strømmen

Komponenter inne i Suspense-boundaries som venter på data, strømmes først som fallback-UI-et sitt (for eksempel en innlastingsindikator). React sender senere en script-tagg som erstatter fallbacken med det ferdig oppløste innholdet – alt uten en gjengivelse av skallet på klientsiden.

bootstrapScripts for hydrering på klienten

Send bootstrapScripts: ['/static/js/client.js'] til renderToPipeableStream for å be React injisere en script-tagg på slutten av strømmen. Nettleseren laster inn denne bunten og kaller hydrateRoot, som kobler Reacts hendelsesbehandlere til det servergjengitte DOM-treet.

onShellReady: Det rette tidspunktet for å starte strømmingen

onShellReady utløses når HTML-skallet (alt utenfor ventende Suspense-boundaries) er klart til å sendes. Dette er riktig tidspunkt å kalle pipe(res) på – men viktigst av alt: angi HTTP-statuskoden og responsheadere før pipe kalles, siden strømming låser HTTP-statusen.

Angi HTTP-hoder før strømming

Fordi strømmingen starter umiddelbart når du kaller pipe(), må alle kall til res.setHeader og alle tilordninger til res.statusCode gjøres før pipe-kallet. Et vanlig mønster er å angi status 200 og Content-Type: text/html i tilbakeringingen onShellReady, og deretter umiddelbart kalle pipe(res).

onShellError: Fatale feil før skallet

onShellError utløses når det oppstår en feil som ikke kan gjenopprettes, før skallet er ferdig gjengitt – for eksempel når en komponent på toppnivå kaster en feil utenfor en Suspense-grense. I dette tilfellet kan du ikke strømme et delvis svar. Omdiriger i stedet til en feilside eller send et statisk HTML-dokument med feilmelding.

onAllReady: For roboter og crawlere

onAllReady utløses når hele React-treet er ferdig behandlet – inkludert alle Suspense-grenser. For søkemotorcrawlere og verktøy som forhåndsviser lenker i sosiale medier, ønsker du å sende komplett HTML uten strømming. Sjekk om forespørselen kommer fra en bot, og kall pipe(res) i onAllReady i stedet for onShellReady.

Feilgjenoppretting under strømming

onError utløses ved feil i Suspense-grenser – React kan fortsatt strømme resten av siden mens den aktuelle grensen viser sitt fallback-grensesnitt. Bruk onError til å logge feilen i observability-pipelinen, uten å avbryte strømmingen for brukeren.

onAllReady kontra onShellReady

Når bør du bruke onAllReady i stedet for onShellReady til å starte strømmingen?

Oppsummering av leksjonen

renderToPipeableStream er React 18s grunnleggende primitive for strømmende SSR på Node.js-servere. Den strømmer HTML-skallet umiddelbart via onShellReady, fyller ut Suspense-grenser etter hvert som dataene blir klare, og hydrerer klienten via bootstrapScripts. Bruk onAllReady for boter og crawlere, onShellError ved fatale feil, og angi alltid HTTP-hoder før du kaller pipe().

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Strømming i React 18: Slik fungerer renderToPipeableStream» gratis?

Ja – hele teksten i «Strømming i React 18: Slik fungerer renderToPipeableStream» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Strømming i React 18: Slik fungerer renderToPipeableStream»?

Forstå hvordan renderToPipeableStream gradvis sender HTML-biter før alle asynkrone data er klare. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Strømming i React 18: Slik fungerer renderToPipeableStream»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Strømming i React 18: Slik fungerer renderToPipeableStream
  2. Suspense-grenser og prioritet ved strømming
  3. Progressiv hydrering med selektiv hydrering
  4. Måle effekten av strømming: FCP, TTI og LCP
← Tilbake til React Academy