React Academy · Pelajaran

Streaming React 18: Cara Kerja renderToPipeableStream

Pahami cara renderToPipeableStream mengirimkan bagian-bagian HTML secara bertahap sebelum semua data asinkron selesai diproses.

Pelajaran 1 dari 413 langkah

Streaming React 18: Cara Kerja renderToPipeableStream adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Sebelum React 18: Hambatan Sinkron

Sebelum React 18, perenderan sisi server menggunakan renderToString, yang bersifat sinkron: React merender seluruh pohon komponen menjadi string sebelum mengirim HTML apa pun ke peramban. Jika ada komponen yang memuat data, server harus menunggu semua data sebelum byte pertama sampai kepada pengguna.

React 18: renderToPipeableStream

React 18 memperkenalkan renderToPipeableStream, yang merender pohon komponen sebagai aliran potongan HTML. Alih-alih menunggu semuanya siap, React mengirim HTML setelah setiap bagian pohon selesai, sehingga peramban dapat segera mulai merender konten yang terlihat.

Anatomi: pipe dan abort

renderToPipeableStream mengembalikan objek dengan dua metode: pipe(writable) dan abort(). pipe menerima aliran Writable Node.js (biasanya respons HTTP) dan mulai mengalirkan HTML ke dalamnya. abort() membatalkan aliran, dan digunakan ketika permintaan dibatalkan atau batas waktu terlampaui.

Yang Dialirkan Terlebih Dahulu: Kerangka

Aliran dimulai dengan kerangka HTML—semua konten yang tidak terhalang oleh batas Suspense yang masih menunggu. Ini mencakup kepala dokumen, navigasi, kaki halaman, elemen tata letak, dan konten apa pun yang tersedia secara sinkron. Kerangka dialirkan segera, sebelum komponen yang bergantung pada data selesai.

UI Cadangan Suspense dalam Aliran

Komponen di dalam batas Suspense yang sedang menunggu data awalnya dialirkan sebagai UI cadangannya (misalnya, indikator pemuatan). React kemudian mengirim tag skrip yang mengganti UI cadangan dengan konten yang telah selesai—semuanya tanpa perenderan ulang kerangka di sisi klien.

bootstrapScripts untuk Hidรasi Sisi Klien

Teruskan bootstrapScripts: ['/static/js/client.js'] ke renderToPipeableStream untuk memberi tahu React agar menyisipkan tag skrip di akhir aliran. Peramban memuat bundel ini dan memanggil hydrateRoot untuk memasang penangan peristiwa React pada DOM yang dirender server.

onShellReady: Saat yang Tepat untuk Mengalirkan

onShellReady dijalankan ketika kerangka HTML (segala sesuatu di luar batas Suspense yang masih menunggu) siap dikirim. Inilah saat yang tepat untuk memanggil pipe(res)—namun, yang penting, tetapkan kode status HTTP dan tajuk respons sebelum memanggil pipe karena pengaliran akan mengunci status HTTP.

Menetapkan Header Sebelum Streaming

Karena streaming langsung dimulai saat Anda memanggil pipe(), setiap penetapan res.setHeader atau res.statusCode harus dilakukan sebelum pemanggilan pipe. Pola yang umum adalah menetapkan status 200 dan Content-Type: text/html dalam callback onShellReady, lalu segera memanggil pipe(res) setelahnya.

onShellError: Kesalahan Fatal Sebelum Kerangka

onShellError dipanggil saat terjadi kesalahan yang tidak dapat dipulihkan sebelum kerangka selesai dirender — misalnya, komponen tingkat atas melempar kesalahan di luar batas Suspense mana pun. Dalam kasus ini, Anda tidak dapat mengalirkan respons sebagian; sebagai gantinya, alihkan ke halaman kesalahan atau kirim dokumen HTML kesalahan statis.

onAllReady: Untuk Bot dan Perayap

onAllReady dipanggil saat seluruh pohon React telah selesai diproses — termasuk semua batas Suspense. Untuk perayap mesin pencari dan penampil pratinjau tautan media sosial, Anda perlu mengirim HTML lengkap tanpa streaming. Periksa apakah permintaan berasal dari bot, lalu panggil pipe(res) dalam onAllReady, bukan dalam onShellReady.

Pemulihan Kesalahan Selama Streaming

onError dipanggil untuk kesalahan dalam batas Suspense — React masih dapat mengalirkan sisa halaman sementara batas tersebut menampilkan antarmuka pengguna kesalahannya sebagai cadangan. Gunakan onError untuk mencatat kesalahan ke alur observabilitas Anda tanpa menghentikan aliran bagi pengguna.

onAllReady dibandingkan dengan onShellReady

Kapan sebaiknya Anda menggunakan onAllReady, bukan onShellReady, untuk mulai memanggil pipe?

Ringkasan Pelajaran

renderToPipeableStream adalah primitif SSR React 18 untuk server Node.js. Fitur ini segera mengalirkan kerangka HTML melalui onShellReady, mengisi batas Suspense saat data selesai diproses, dan melakukan hidrasi pada klien melalui bootstrapScripts. Gunakan onAllReady untuk bot dan perayap, onShellError untuk kegagalan fatal, dan selalu tetapkan header HTTP sebelum memanggil pipe().

Gratis untuk memulai

Belajar React dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
88
Pelajaran
324

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Streaming React 18: Cara Kerja renderToPipeableStream” gratis?

Ya — teks lengkap “Streaming React 18: Cara Kerja renderToPipeableStream” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Streaming React 18: Cara Kerja renderToPipeableStream”?

Pahami cara renderToPipeableStream mengirimkan bagian-bagian HTML secara bertahap sebelum semua data asinkron selesai diproses. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Streaming React 18: Cara Kerja renderToPipeableStream” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Streaming React 18: Cara Kerja renderToPipeableStream
  2. Batas Suspense dan Prioritas Streaming
  3. Hidrasi Progresif dengan Hidrasi Selektif
  4. Mengukur Dampak Streaming: FCP, TTI, dan LCP
← Kembali ke React Academy