React 18:n suoratoisto: renderToPipeableStreamin toiminta
Ymmärrä, miten renderToPipeableStream lähettää HTML-osia vaiheittain ennen kuin kaikki asynkroninen data on valmis.
React 18:n suoratoisto: renderToPipeableStreamin toiminta on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
Ennen React 18: synkroninen pullonkaula
Ennen React 18:aa palvelinrenderöinnissä käytettiin renderToStringia, joka on synkroninen: React renderöi koko komponenttipuun merkkijonoksi ennen minkään HTML:n lähettämistä selaimeen. Jos jokin komponentti lataa tietoja, palvelimen on odotettava kaikkien tietojen valmistumista, ennen kuin ensimmäinen tavu saavuttaa käyttäjän.
React 18: renderToPipeableStream
React 18 toi käyttöön renderToPipeableStreamin, joka renderöi komponenttipuun HTML-palasten virtana. Sen sijaan että React odottaisi kaiken valmistumista, se lähettää HTML:ää sitä mukaa kuin puun osat valmistuvat, jolloin selain voi aloittaa näkyvän sisällön renderöinnin heti.
Rakenne: pipe ja abort
renderToPipeableStream palauttaa olion, jossa on kaksi metodia: pipe(writable) ja abort(). pipe vastaanottaa Node.js Writable -streamin (tyypillisesti HTTP-vastauksen) ja aloittaa HTML:n streamauksen siihen. abort() peruuttaa streamin, ja sitä käytetään, kun pyyntö peruutetaan tai aikakatkaisu ylittyy.
Mikä streamataan ensin: shell
Stream alkaa HTML-shellistä eli kaikesta sisällöstä, jota odottava Suspense-rajaus ei estä. Tähän kuuluvat dokumentin head, navigaatio, alatunniste, layoutin rakenteet ja kaikki synkronisesti saatavilla oleva sisältö. Shell streamataan heti, ennen kuin mitkään tiedoista riippuvaiset komponentit valmistuvat.
Suspense-fallbackit streamissa
Suspense-rajausten sisällä olevat tietoja odottavat komponentit streamataan aluksi fallback-UI:na (esimerkiksi latausspinnerinä). React lähettää myöhemmin script-tagin, joka korvaa fallbackin valmiilla sisällöllä — ilman shellin uudelleenrenderöintiä clientillä.
bootstrapScripts asiakaspuolen hydraatiota varten
Välitä renderToPipeableStreamille bootstrapScripts: ['/static/js/client.js'], jotta React lisää script-tagin streamin loppuun. Selain lataa tämän bundlen ja kutsuu hydrateRootia, joka liittää Reactin tapahtumankäsittelijät palvelimella renderöityyn DOM:iin.
onShellReady: oikea hetki aloittaa streamaus
onShellReady suoritetaan, kun HTML-shell (kaikki odottavien Suspense-rajausten ulkopuolinen sisältö) on valmis lähetettäväksi. Tällöin on oikea hetki kutsua pipe(res)-metodia — mutta HTTP-statuskoodi ja vastauksen otsakkeet on tärkeää asettaa ennen pipe-kutsua, koska streamaus lukitsee HTTP-statuksen.
Otsakkeiden määrittäminen ennen streamausta
Koska streamaus alkaa heti, kun kutsutte pipe()-funktiota, kaikkien res.setHeader- tai res.statusCode-määritysten on tapahduttava ennen pipe()-kutsua. Yleinen käytäntö on asettaa tilakoodiksi 200 ja Content-Type: text/html -otsakkeeksi onShellReady-callbackissa ja kutsua heti sen jälkeen pipe(res)-funktiota.
onShellError: Kriittiset virheet ennen shelliä
onShellError suoritetaan, kun ennen shellin renderöinnin valmistumista tapahtuu virhe, josta ei voida palautua — esimerkiksi kun ylätason komponentti aiheuttaa poikkeuksen Suspense-rajan ulkopuolella. Tällöin osittaista vastausta ei voi streamata. Ohjatkaa käyttäjä sen sijaan virhesivulle tai lähettäkää staattinen HTML-virhedokumentti.
onAllReady: Boteille ja indeksoijille
onAllReady suoritetaan, kun koko React-puu on valmis — myös kaikki Suspense-rajat. Hakukoneiden indeksointiroboteille ja sosiaalisen median linkkien esikatseluille kannattaa lähettää valmis HTML ilman streamausta. Tarkistakaa, onko pyyntö peräisin botilta, ja kutsukaa pipe(res)-funktiota onAllReady-tapahtumassa onShellReady-tapahtuman sijaan.
Virheistä palautuminen streamauksen aikana
onError suoritetaan Suspense-rajoissa tapahtuvien virheiden yhteydessä. React pystyy silti streamaamaan muun sivun, kun kyseinen raja näyttää virhenäkymän. Käyttäkää onError-funktiota virheen kirjaamiseen observability-putkeen keskeyttämättä käyttäjän streamausta.
onAllReady vai onShellReady
Milloin onAllReady-tapahtumaa pitäisi käyttää onShellReady-tapahtuman sijaan streamauksen aloittamiseen?
Oppitunnin yhteenveto
renderToPipeableStream on React 18:n Node.js-palvelimille tarkoitettu streamaavan SSR:n perusratkaisu. Se streamaa HTML-shellin heti onShellReady-tapahtuman kautta, täydentää Suspense-rajoja datan valmistuessa ja hydratoi asiakkaan bootstrapScripts-määrityksen avulla. Käyttäkää onAllReady-tapahtumaa boteille ja indeksoijille, onShellError-tapahtumaa kriittisiin virheisiin ja määrittäkää HTTP-otsakkeet aina ennen pipe()-funktion kutsumista.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”React 18:n suoratoisto: renderToPipeableStreamin toiminta” ilmainen?
Kyllä – oppitunnin ”React 18:n suoratoisto: renderToPipeableStreamin toiminta” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”React 18:n suoratoisto: renderToPipeableStreamin toiminta”?
Ymmärrä, miten renderToPipeableStream lähettää HTML-osia vaiheittain ennen kuin kaikki asynkroninen data on valmis. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”React 18:n suoratoisto: renderToPipeableStreamin toiminta”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- React 18:n suoratoisto: renderToPipeableStreamin toiminta
- Suspense-rajat ja suoratoiston prioriteetti
- Progressiivinen hydraatio valikoivalla hydraatiolla
- Suoratoiston vaikutuksen mittaaminen: FCP, TTI ja LCP