Jauna vēsture

React jaunie serveru komponenti varētu būt bloķēto tīmekļa lietotņu nāve

autors Gianna Song16m2025/04/24
Read on Terminal Reader

Pārāk ilgi; Lasīt

Uzziniet, kā veidot mūsdienu React lietotnes, izmantojot React Server Components (RSC), SSR un CSR Next.js 15.
featured image - React jaunie serveru komponenti varētu būt bloķēto tīmekļa lietotņu nāve
Gianna Song HackerNoon profile picture
0-item


(*Ja vēlaties pāriet uz priekšu un ienirt tieši tehniskajā neskaidrībā, pāriet uz 1. jautājumu, kāpēc tika ieviesti React Server komponenti.)


2010. gadu sākumā React revolucionizēja frontend izstrādi ar deklaratīvo komponentu modeli un efektīvu virtuālo DOM difingu. Kas sākās kā vienkārša skata bibliotēka drīz kļuva par liela mēroga vienas lapas lietojumprogrammu (SPA) mugurkaulu. Šīs SPAs galvenokārt izmantoja Client-Side Rendering (CSR), kas nozīmē, ka pārlūkprogramma lejupielādētu JavaScript bundli, to izpildītu un uzbūvētu UI pilnībā uz klienta.


This client-centric model was flexible and highly interactive, and it defined “modern” web apps for years. However, as applications grew more complex and feature-rich, the CSR approach started to show its cracks:


    Tātad
  • Ilgāks laiks interaktīvam (TTI): smagi JavaScript bundles un klientu puses darbs nozīmēja, ka lietotāji gaidīja ilgāk, pirms viņi faktiski varēja mijiedarboties ar lapu.
  • Tātad
  • Hidratācijas sastrēgumi: servera rādītāja HTML konvertēšana interaktīvā lietojumprogrammā (hidratācija) kļuva par veiktspējas sastrēguma punktu, jo īpaši, jo palielinājās dinamiskā satura apjoms.
  • Tātad
  • Pārpludinātie bundži: Lietojumprogrammas bieži piegādāja daudz vairāk JavaScript nekā nepieciešams, apgrūtinot pārlūkprogrammas ar kodu funkcijām vai saturu, kas varētu būt piegādāts efektīvāk.
  • Tātad
  • Nepārspējama veiktspēja: jo lielāka un sarežģītāka ir lietotne, jo grūtāk ir uzturēt ātru veiktspēju visās ierīcēs un tīkla apstākļos.
  • Tātad

Next.js parādījās, lai risinātu dažas no šīm sāpēm, ieviešot Server-Side Rendering (SSR), Static Site Generation (SSG) un citas optimizācijas.Šīs metodes uzlaboja sākotnējo ielādes laiku un atlaida daļu no UI renderēšanas darba uz serveri.


Ar Next.js 15, kas darbojas uz React 19, jauna renderēšanas paradigma ir uzņēmies centru:React Server Components (RSC)RSC ļauj izstrādātājiem nevainojami apvienot servera rādītās un klienta rādītās sastāvdaļas vienā React kokā.Ietekmes ir nozīmīgas.zero JavaScript overheadCitiem vārdiem sakot, šīm sadaļām nav nepieciešama klienta puses hidratācija.Datu iegūšanas loģika ir vienkāršota arī, darbojoties servera sastāvdaļās, novēršot daudzus nevajadzīgus API zvanus no pārlūkprogrammas.


Šis raksts nav RSC virsmas līmeņa pārskats.Kad es nolēmu 2025. gadā rakstīt par Next.js efektīvu izmantošanu, ātri kļuva skaidrs, ka React Server Components ir pelnījuši īpašu dziļu niršanu.


By the end, I hope you come away with the same clarity and appreciation for RSC that I did through the process of researching and writing this piece.

Intro: From CSR to RSC — How Rendering Evolved in React

Ievads: no korporatīvās atbildības līdz RSC — kā rādīšana attīstījās reaģējot

Pēdējā desmitgadē, veids, kā mēs veidojam React lietojumprogrammas, ir būtiski attīstījies, un ar to, kā mēs domājam par renderēšanu.

Īsa klientu puses rādīšanas (CSR) vēsture React

React gained its popularity through Client-Side Rendering (CSR)- modelis, kurā pārlūkprogramma lejupielādē JavaScript, to izpilda un izveido visu lietotāja interfeisu uz klienta.Šī pieeja deva izstrādātājiem pilnīgu kontroli pār interaktivitāti un stāvokli, un padarīja to viegli izveidot dinamiskas vienas lapas lietojumprogrammas (SPA).


Tomēr CSR nāca ar ievērojamiem kompromisiem:

    Tātad
  • Lēnāka sākotnējā slodze, īpaši mobilajos vai sliktos tīklos
  • Tātad
  • Slikts SEO satura virzītām lapām
  • Tātad
  • JavaScript smagi bundži — pat lapām ar minimālu interaktivitāti
  • Tātad
  • Hidratācijas solis bija nepieciešams pēc HTML ielādēšanas, aizkavējot laiku interaktīvai darbībai
  • Tātad


Kādu laiku šie ierobežojumi bija tikai “kā lietas bija”.

Kā Next.js ieviesa SSR un SSG React attīstībā

KadNext.jsTas ieviesa servera rādīšanu (SSR) un statisko vietņu ģenerāciju (SSG) kā pirmās klases pilsoņus React.


    Tātad
  • SSR ļāva lapas ģenerēt pēc pieprasījuma, uzlabojot SEO un augšupielādes ātrumu dinamiskam saturam.
  • Tātad
  • SSG ļāva saturu sagatavot izvietošanas laikā, kas ir ideāli piemērots emuāriem, dokumentiem un mārketinga vietnēm.
  • Tātad
  • Incremental Static Regeneration (ISR) pārklāja plaisu, ļaujot statiskām lapām atjaunināt pēc izvietošanas.
  • Tātad


Šī elastība palīdzēja izstrādātājiem panākt labāku līdzsvaru starp veiktspēju, SEO un izstrādātāja pieredzi.


Bet pat ar SSR un SSG joprojām bija paliekoša problēma:we were still sending too much JavaScript to the browser— pat komponentiem, kuriem nav jābūt interaktīviem.

React Server komponentu (RSC) pieaugums 2025. gadā

Ar atbrīvošanu noNext.js 15unReact 19Mēs ieiet jaunā laikmetā:React Server Components (RSC) are now a core part of how we build apps.


Atšķirībā no SSR, kas joprojām prasa hidratāciju un piegādā JavaScript klientam,RSC allows you to render components on the server — without sending any JavaScript to the browser at allTātad


Tā ir liela maiņa:

    Tātad
  • Komponenti tagad var piekļūt servera puses datiem tieši
  • Tātad
  • Statiskam saturam nav nepieciešama hidratācija
  • Tātad
  • Jūs varat sajaukt servera un klienta komponentus vienā React kokā, sastādot savu rādīšanas stratēģiju pa komponentiem
  • Tātad


RSC neaizstāj SSR vai SSG, tascomplements them, atbloķējot smalkāku kontroli pār veiktspēju, bundžu lielumu un rādīšanas uzvedību.


2025. gadā RSC ir pamatkoncepcija, kas katram React vecākajam inženierim ir jāapgūst.

1. Why React Server Components Were Introduced

Kāpēc tika ieviesti React Server komponenti

Tā kā React lietojumprogrammas kļuva sarežģītākas, nozare sāka sajust savu panākumu svaru.Tomēr klientu puses rādīšana (CSR), servera puses rādīšana (SSR) un statiskā vietnes ģenerācija (SSG) piedāvāja dažādas stratēģijas, lai izveidotu veiktspējīgas tīmekļa lietojumprogrammas, katra no tām veica kompromisu, kas kļuva acīmredzamāka mērogā.

CSR, SSR un SSG ierobežojumi

1. noHydration overhead

Pat ar SSR vai SSG, kad HTML sasniedz pārlūkprogrammu, React ir nepieciešams "hidratēt" lapu - pievienot notikumu klausītājus, atsākt komponentus un efektīvi pārbūvēt lietotni atmiņā.

2 DzīveJavaScript bundle bloat

Ar CSR, katrs komponents, lietojumprogramma un API zvanu, kas ir daļa no lapas, ir jānosūta uz pārlūkprogrammu - neatkarīgi no tā, vai tas ir interaktīvs vai ne. SSR un SSG nedaudz samazina šo, bet lielākā daļa no bundles joprojām ir jāizpilda uz klienta.

TrīsDisconnected data-fetching logic

Pre-RSC pasaulē dati dzīvoja ārpus komponentiem, kas to rādīja.getServerSidePropsvaigetStaticProps(vai zvanīt uz APIsuseEffectŠī atdalīšana pievienoja kognitīvo pārsvaru un padarīja kodu grūtāk kopīgi izvietot un atkārtoti izmantot.

Kādas problēmas RSC tika izstrādāta, lai atrisinātu

React Server Components (RSC) tika izveidoti, lai risinātu šos pieaugošos sāpju punktus ar vienkāršu, bet spēcīgu ideju:let components execute on the server by default, and only send JavaScript to the browser when it’s absolutely necessaryTātad


Eliminate unnecessary JavaScript

RSC ļauj komponentus rādīt servera pusēBezJa komponentam nav nepieciešama interaktivitāte, nav nepieciešams mitrināt vai ielādēt tā JS paketi vispār.


Server-side data access within the component tree

RSC novērš mākslīgo robežu starp datu iegūšanu un rādīšanu.async/awaitlai tieši piekļūtu datu bāzēm, failu sistēmām vai API - datu koplietošana un loģikas apskatīšana dabiski, bez nepieciešamības izmantot API maršrutus vai prop urbšanu.


Improve rendering efficiency and developer experience

Pārvietojot neinteraktīvo loģiku uz serveri, izstrādātāji var izveidot vieglākas lietotnes ar mazākiem iepakojumiem un labāku veiktspēju. RSC arī vienkāršo mentālo modeli - jūs vienkārši rakstāt komponentus un ļaujiet sistēmai pārvaldīt, kur tās darbojas un kā tās tiek piegādātas.


RSC doesn’t aim to replace SSR or SSG, instead, it complements them. It lets you think at the component level, ne tikai lapas līmenī, par to, kas jāveic serverī un kas pieder pārlūkprogrammā.


In short: React Server Components were designed to bring modern frontend development back to its lean, fast, and maintainable roots without compromising interactivity.

2. Rendering Strategies in Next.js 15: RSC vs SSR vs CSR

Renderēšanas stratēģijas Next.js 15: RSC vs SSR vs CSR

Next.js 15 piedāvā izstrādātājiem granulāru rādīšanas modeli, kas pārsniedz tradicionālās lapas līmeņa stratēģijas.React Server Components (RSC)kļūstot par pirmās klases koncepciju, ir svarīgi saprast, kā tās salīdzina ar diviem pazīstamiem modeļiem:Server-Side Rendering (SSR)unClient-Side Rendering (CSR)Tātad


Lai gan SSG (Static Site Generation) joprojām ir vērtīgs konkrētos gadījumos, to var uzskatīt parcaching strategyIzveidots uz SSR. pretēji,RSC vs SSR vs CSRpārstāv atšķirīgus izpildes laika rādīšanas ceļus, un to izpratne ir izšķiroša, lai 2025. gadā pieņemtu lēmumus par veiktspēju un arhitektūru.

💡 Pirms mēs salīdzinām: ko mēs domājam ar "interaktīvo komponentu"?

React un Next.js kontekstāinteractive componentJebkurš elements, kasrequires client-side JavaScript to respond to user input or browser eventsTātad


Tas ietver (bet neaprobežojas tikai ar):

    Tātad
  • pogas, kas atjaunina stāvokli uz klikšķa
  • Tātad
  • Veidlapas ar validāciju vai kontrolētiem ievadiem
  • Tātad
  • Dropdowns un modāli, kas pārslēdzas atvērts / slēgts
  • Tātad
  • Animācijas, kas izraisītas ar skrūvēšanu vai hover
  • Tātad
  • Tabs, karuseli, filtri, slaidi
  • Tātad
  • Sastāvdaļas, kas izmanto useState, useEffect vai useReducer
  • Tātad

Ja sastāvdaļa irevent handlersIekšējāstatevai paļaujas uzDOM or browser APIsTam ir jāstrādā pie klienta.


Interactivity = Browser-side behavior + JS event listeners + local state.


Šīs atšķirības izpratne palīdz noskaidrotwhy RSC exists: lai izvairītos no JavaScript piegādes UI daļām, kurām nav jābūt interaktīvām.

Rendering modeļi uz skatu

TātadFunkcija RSC (React Server Components) SSR (Server-Side Rendering) CSR (Client-Side Rendering)TātadServeru serveru klientu atrašanās vietaTātadTātadTātadTātadTātadTātadTātadJā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā JāTātadInteraktivitāte Nē ✅ Pilna ✅ PilnaTātadPiekļuve servera resursiem ✅ Tiešā ✅ Ar getServerSideProps 🔸 Nepieciešams API zvanusTātadKad tas darbojas pēc pieprasījuma vai straumēts pēc pieprasījuma pēc ielādes pārlūkprogrammāTātadIdeāls lietošanas gadījums Statiski vai ar datiem saistīti skati Personalizēti vai dinamiski UI Interaktīvie plūsmas, vietējais UXTātad
JavaScript nosūtīts uz pārlūkprogrammuTātad

Neviens

Funkcija RSC (React Server Components) SSR (Server-Side Rendering) CSR (Client-Side Rendering)TātadServeru serveru klientu atrašanās vietaTātadTātadJavaScript nosūtīts uz pārlūkprogrammuTātadTātad

Neviens

TātadJāTātadJāTātadTātadJā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā Jā JāTātadInteraktivitāte Nē ✅ Pilna ✅ PilnaTātadPiekļuve servera resursiem ✅ Tiešā ✅ Ar getServerSideProps 🔸 Nepieciešams API zvanusTātadKad tas darbojas pēc pieprasījuma vai straumēts pēc pieprasījuma pēc ielādes pārlūkprogrammāTātadIdeāls lietošanas gadījums Statiski vai ar datiem saistīti skati Personalizēti vai dinamiski UI Interaktīvie plūsmas, vietējais UXTātadFunkcija RSC (React Server Components) SSR (Server-Side Rendering) CSR (Client-Side Rendering)Funkcijas

Feature

Tātad

RSC (reaktīvā servera sastāvdaļas)

RSC (reaktīvā servera sastāvdaļas)

Tātad

SSR (serveru puses rādīšana)

SSR (serveru puses rādīšana)

CSR (klientu puses rādīšana)

CSR (klientu puses rādīšana)

Serveru serveru klientu atrašanās vietaRādīt atrašanās vietu

Rādīt atrašanās vietu

Tātad

Serveris

Serveris

Tātad

Serveris

Serveris

Klients

Klients

TātadJavaScript nosūtīts uz pārlūkprogrammuTātadTātad

Neviens

TātadJāTātadJāTātadJavaScript nosūtīts uz pārlūkprogrammu

JavaScript nosūtīts uz pārlūkprogrammu

Tātad

Neviens

Neviens

Tātad

Tātad

TātadNepieciešama hidroizolācijaTātad

❌ No

TātadJāTātadJāTātadNepieciešama hidroizolācija

Nepieciešama hidroizolācija

Tātad

Jā Jā

Jā Jā

Interaktivitāte Nē ✅ Pilna ✅ PilnaTātad

Interaktivitāte

Interaktivitāte

Tātad

Tātad

Pilnīgi

Pilnīgi

Tātad

Pilnīgi

Pilnīgi

Piekļuve servera resursiem ✅ Tiešā ✅ Ar getServerSideProps 🔸 Nepieciešams API zvanusTātad

Piekļuve serveriem

Piekļuve serveriem

Tātad

Tiešā

Tiešā

Tātad

✅ Caur getServerSideProps

Šo ceļugetServerSideProps

Tātad

Vajadzīgi apgaismojumi

Vajadzīgi apgaismojumi

Kad tas darbojas pēc pieprasījuma vai straumēts pēc pieprasījuma pēc ielādes pārlūkprogrammāKad tas iet

Kad tas iet

Pēc pieprasījuma vai straumējot

Pēc pieprasījuma vai straumējot

Pēc pieprasījuma

Pēc pieprasījuma

Lejupielādēt Browser

Lejupielādēt Browser

Ideāls lietošanas gadījums Statiski vai ar datiem saistīti skati Personalizēti vai dinamiski UI Interaktīvie plūsmas, vietējais UXIdeāls lietošanas gadījums

Ideāls lietošanas gadījums

Statiskie vai datu saistītie skati

Statiskie vai datu saistītie skati

Personalizēts vai dinamisks UI

Personalizēts vai dinamisks UI

Interaktīvie plūsmas, vietējā UX

Interaktīvie plūsmas, vietējā UX

Think in Components, Not Just Pages

Iepriekšējās versijās Next.js, rādīšanas stratēģijas tika piemērotaspage levelTu bijigetServerSideProps,getStaticPropsUn, lai ko jūs izvēlētos, piemērotsVisa lapaTas bija jēga pasaulē, kur renderēšana notika viss vai nekas - vai nu statiski uzbūves laikā, vai dinamiski katrā pieprasījumā.


Bet arReact Server Components (RSC)un tāsapp/katalogs ir ieviests Next.js 13+ un standartizēts 15rendering is no longer a top-down, one-size-fits-all decisionTas kļūst par aper-component concernTas noved pie jaunas domāšanas.

Jauns domāšanas veids: deklaratīvs un kompozīts

Šī maiņa ir vairāk nekā API maiņa, tā ir konceptuāla maiņa, kā jūs arhitektējat savu frontendu.

Declarative

Orķestra vietāunKurkomponenti tiek rādīti manuāli, jūs tagad vienkāršideclare what each component does and what it needs— React un Next.js rūpējas par pārējo.


Jūs nevarat manuāli savienot API galamērķus vai nodot SSR uz komponentiem.

// Server Component
export default async function ProductInfo() {
  const product = await db.getProduct(slug)
  return <div>{product.name}</div>
}


Šī sastāvdaļa:

    Tātad
  • Darbojas serverī
  • Tātad
  • JS netiek nosūtīts klientam
  • Tātad
  • Nepieciešams neviens getServerSideProps vai API slānis
  • Tātad
  • Ir “tikai sastāvdaļa” – nav nepieciešama papildu abstrakcija
  • Tātad


Jūs aprakstāt UI un tās datu vajadzībasdeclaratively, un atskaņošanas dzinējs skaitās pārējo.

Composable

Dažādas jūsu UI daļas var izmantot dažādas rādīšanas stratēģijas —on the same page, at the same time, and with minimal overheadTātad


Piemēram:

// Product page layout
<ProductInfo />           // Server Component (no JS, rendered on the server)
<AddToCartButton />       // Client Component (interactive)
<SimilarProducts />       // Static Component (SSG with revalidation)


Šīs sastāvdaļas dzīvo kopā tajā pašā kokā, bet katra no tām:

    Tātad
  • Darbojas citā vidē (serveris, klients, būve)
  • Tātad
  • Izmanto tikai nepieciešamos datus un kodu
  • Ships exactly what’s required to the browser — no more, no less
  • Tātad


To make this more concrete, I created a minimal demokas parāda, kā dažādas rādīšanas stratēģijas var līdzāspastāvēt vienā lapā.

3. How React Server Components Work Under the Hood

Kā React servera komponenti darbojas zem vāka

React Server Components (RSC) ir vairāk nekā tikai jauna atskaņošanas stratēģija, tie fundamentāli maina to, kā sastāvdaļu koki tiek būvēti, atskaņoti un pārraidīti.how it works behind the scenesun to, kā tas ietekmē valsts, interaktivitātes un datu robežas.

Serveru/klientu robeža: sadalīts reaģēšanas koks

React lietojumprogrammas, kas izmanto RSC, vairs nav pilnībā attēlotas uz klienta.component tree is split into two worlds: no


    Tātad
  • Serveru komponenti: Izpildiet tikai serverī. JavaScript nekad netiek nosūtīts uz pārlūkprogrammu. nevar saglabāt vietējo stāvokli vai pievienot notikumu klausītājus. Ideāli piemērots statiskā satura un servera saistītas loģikas (piemēram, DB piekļuves) rādīšanai.
  • Tātad
  • Klientu komponenti: tiem jābūt skaidri marķētiem ar "izmantojiet klientu". Tie ir apkopoti pārlūkprogrammai draudzīgā JavaScript un atbalsta pilnīgu interaktivitāti, vietējo stāvokli, lietošanas efektu un notikumu apstrādi.
  • Tātad


Build vai runtime laikā React izveido koku, kurā serveris un klientu komponenti pastāv kopā, un tos apvieno renderēšanas laikā.


Kas"use client"Patiesībā tas

Kad jūs pievienojat"use client"failu, tas atzīmē, ka viss modulis un tā eksports kāclient-onlyAiz skatuves tas pavada Next.js būvēšanas cauruļvadu, lai:


    Tātad
  • Kompilējiet šo failu (un tās atkarības) atsevišķā JavaScript bundžā
  • Tātad
  • Exclude that component from being run on the server
  • Tātad
  • Izmantojiet to kā klasisku React CSR komponentu ar hidratācijas loģiku


Šī direktīva darbojas kāboundary markerVisas sastāvdaļas virs tā var atskaņot serveris; visas sastāvdaļas zem tā ir jāatskaņo pārlūkprogrammā.

Straumēšana: atskaņošana gabalos, ne visi uzreiz

RSC aplauzumsstreamingTā vietā, lai gaidītu, kad tiks izveidots pilns React koks, pirms to nosūtīt uz pārlūkprogrammu, serverisstreams serialized fragmentsKlientiem, kad tie ir gatavi.


  • Servera komponenti tiek rādīti un nosūtīti pēc iespējas ātrāk
  • Tātad
  • Vietnes turētāji (piemēram, izmantojot <Suspense>) uz laiku aizpilda
  • Tātad
  • Klientu komponenti pakāpeniski mitrina, tikai tad, kad tie ir uzlādēti
  • Tātad

Kā tas ir iespējams?


RSC ievieš koncepciju, ko sauc par selektīvu hidratāciju.Kad klienta sastāvdaļa tiek rādīta servera sastāvdaļu kokā, React ievieto vietas turētāju (<div data-rsc-placeholder />) un novērš hidratāciju.


Pēc tam, kad klients ir ielādējis atbilstošo JS bundļu:

    Tātad
  1. React lazily uzlādē šo konkrēto sastāvdaļu
  2. Tātad
  3. Atrod vietu turētāju un ieliek to dzīvajā kokā
  4. Hidratē to izolācijā, nerādot visu lapu


Šis dizains irdecoupled and progressive: your app starts fast, and interactivity comes online gradually.

<Suspense fallback={<LoadingDetails />}>
  <ProductDetails />  // Server Component
</Suspense>

<AddToCartButton />    // Client Component (hydrated later)

⚙️ Data Fetching and Code Splitting in RSC

Vēl viens svarīgs RSC “maģija”:you can fetch data directly inside components withTātadasync/await — without relying on getServerSideProps,useEffectVai arī manuālā pārsūtīšana.


// Server Component
export default async function Dashboard() {
  const stats = await getStatsForUser()
  return <StatsView data={stats} />
}


Kāpēc tas ir iespējams?

  • RSC komponenti darbojas kā reālas servera funkcijas, nevis kā klientu kompilēti moduļi
  • Viņi var piekļūt datu bāzēm, iekšējiem API, failu sistēmām vai jebkam, kas atbalsta jūsu servera darbspēju
  • Rezultāts tiek rādīts HTML (nevis JS) un straumēts uz klientu


Tāpat arī:

  • No hydration needed, since the result is static
  • Tātad
  • No loading UI logic in the component itself — everything resolves before it hits the browser
  • Tātad
  • Šīs sastāvdaļas kods netiek nosūtīts klientam, ja vien tas nav iestrēdzis klienta robežās.


Tas ievērojami samazina katla plāksnes un paketes izmēru, vienlaikus saglabājot loģiku ar UI - ilgstošs React mērķis beidzot realizēts mērogā.

🚫 State, Hooks, and Lifecycle Considerations

RSCdoes not support traditional React hooks like useState,useEffect, or useRefJo viņidon’t run in the browser.

TātadTātadTātadTātadTātadTātad

Feature

Server Component

Klienta sastāvdaļa

Izmantojiet

Tātad



Lietošanas efekts



useContext

✅ (if static)

Async / Gaidīt


Tātad

(vajadzētu iesaiņot efektos)

Tātad

Event handlers


Funkcijas Servera sastāvdaļa Klienta sastāvdaļaIzmantojietTātadEfekts

Izmanto kontekstu

Tātad

✅ (if static)

TātadTātadasync/await ✅ (vajadzētu iesaiņot efektos)TātadTātad

Notikumu rīkotāji

TātadTātad



TātadFunkcijas Servera sastāvdaļa Klienta sastāvdaļa

Funkcijas

Funkcijas

Servera sastāvdaļa

Server Component

Klienta sastāvdaļa

Klienta sastāvdaļa

Izmantojiet

Izmantojiet

useState

Tātad


Tātad



Lietošanas efektsTātadTātad



TātadLietošanas efekts

useEffect

Tātad




useContext

Tātad

✅ (if static)

Tātad

Izmanto kontekstu

useContext

✅ (if static)

✅ (if static)


Async / Gaidīt


TātadTātad

(vajadzētu iesaiņot efektos)

Async / Gaidīt

async/await

Tātad



Tātad

(vajadzētu iesaiņot efektos)

(vajadzētu iesaiņot efektos)

Tātad

Notikumu rīkotāji

Tātad



TātadTātad

Notikumu rīkotāji

Event handlers

Tātad





Tas nodrošina skaidru atbildības sadalījumu:

  • Serveru komponenti: dati un izkārtojums
  • Tātad
  • Klientu komponenti: interaktivitāte un vietējais stāvoklis

React Server Components are designed to simplify your app. Once you internalize the boundary rules, the streaming model, and async data access, you can compose fast, personalized, and minimal-JS appsar daudz mazāk boilerplate nekā agrāk.

4. What’s the Best Practice? Combining RSC, SSR, and SSG

4. What’s the Best Practice? Combining RSC, SSR, and SSG

One of the most common questions React engineers face in Next.js 15 isn’t “should I use RSC?” — it’s “how do I combine RSC with SSR and SSG in a maintainable, high-performance way?”


The beauty of Next.js 15 is that you’re no longer limited to one rendering strategy per page. Instead, you can now compose rendering strategies at the component level, piemērojot vispiemērotāko pieeju katrai UI daļai.


Šajā sadaļā ir ieviesta praktiska sistēma, lai pieņemtu šo lēmumu, pamatojoties uz faktiskajām arhitektūras vajadzībām.

Sāciet ar pamatjautājumu: kas ir vajadzīgs šim komponentam?

Uzdodiet šos četrus jautājumus katram komponentam:

    Tātad
  1. Does it need to be interactive?
    • ✅ Yes → Use a Client Component
  2. Tātad
  3. Does it need secure, request-specific, or real-time data?
    • ✅ Yes → Consider SSR
  4. Tātad
  5. Vai to var iepriekš aprēķināt vai bieži atjaunināt? ✅ Jā → Labāk SSG
  6. Tātad
  7. Does it fetch server data but never need to run on the client?
    • ✅ Yes → Use RSC

Piemērs: produkta lapas stratēģijas sadalījums

Here’s how a typical e-commerce prduct page might be composed using all three strategies:

TātadSastāvdaļas Rendering Strategy Iemesls Produkta detaļas RSC Iegūta no DB, nav interaktivitātes, nav nepieciešams mitrināt PriceWithPersonalization SSR Atkarībā no lietotāja sesijas, dinamiska pēc pieprasījuma AddToCartButton CSR Prasa interaktivitāti un vietējo stāvokli Saistīti Produkti SSG (ar ISR) Drošs kešatmiņā izveides laikā, var atkārtot ik pēc 24 stundām vai pa tagiem StockStatusBanner RSC + straumēšana Bieži mainās, straumē ar Suspense, lai neaizliegtu TTFB
Kompozīcija, kas sniedz stratēģijas iemesluTātad

Produktu detaļas

TātadRSCIegūts no DB, nav interaktivitātes, nav nepieciešams mitrinātTātad

CenaPersonalizācija

SSRTātadAtkarībā no lietotāja sesijas, dinamiska pēc pieprasījumaAddToCartButton CSR Prasa interaktivitāti un vietējo stāvokliTātadTātad

Saistītie produkti

TātadSSG (ar ISR)TātadDrošs kešatmiņā uzbūves laikā, to var atjaunot ik pēc 24 stundām vai pa tagamTātadAkciju sabiedrība BannerTātadRSC + straumēšanaBieži mainās, straumē ar suspensiju, lai netraucētu TTFBTātadKompozīcija, kas sniedz stratēģijas iemeslu

Component

Component

Rādīt stratēģiju

Rādīt stratēģiju

Reason

Iemesls

ProductDetails

TātadRSCIegūts no DB, nav interaktivitātes, nav nepieciešams mitrinātTātad

Produktu detaļas

ProductDetails

RSC

RSC

Iegūts no DB, nav interaktivitātes, nav nepieciešams mitrināt

Iegūts no DB, nav interaktivitātes, nav nepieciešams mitrināt

CenaPersonalizācija

SSRTātadAtkarībā no lietotāja sesijas, dinamiska pēc pieprasījuma

CenaPersonalizācija

PriceWithPersonalization

Tātad

SSR

SSR

Atkarībā no lietotāja sesijas, dinamiska pēc pieprasījuma

Atkarībā no lietotāja sesijas, dinamiska pēc pieprasījuma

TātadTātad

AddToCartButton

TātadCSRTātadPrasa interaktivitāti un vietējo valstiTātadTātad

AddToCartButton

AddToCartButton

CSR

CSR

Prasa interaktivitāti un vietējo valsti

Prasa interaktivitāti un vietējo valsti

TātadTātad

Saistītie produkti

TātadSSG (ar ISR)TātadDrošs kešatmiņā uzbūves laikā, to var atjaunot ik pēc 24 stundām vai pa tagamTātadTātad

Saistītie produkti

RelatedProducts

Tātad

SSG (ar ISR)

SSG (with ISR)

Drošs kešatmiņā uzbūves laikā, to var atjaunot ik pēc 24 stundām vai pa tagam

Drošs kešatmiņā uzbūves laikā, to var atjaunot ik pēc 24 stundām vai pa tagam

Akciju sabiedrība BannerTātadRSC + straumēšanaBieži mainās, straumē ar suspensiju, lai netraucētu TTFBTātadAkciju sabiedrība Banner

StockStatusBanner

Tātad

RSC + straumēšana

RSC + streaming

Bieži mainās, straumē ar suspensiju, lai netraucētu TTFB

Frequently changing, streamed in with Suspense to not block TTFB

Katra sastāvdaļa darbojasjust what it needs to do — no more, no less. No full-page hydration, no global data fetching, no unnecessary JavaScript.

Izstrādāt paraugpraksi stratēģiju apvienošanai

Sākums > Serveri

Ieslēdziet katru komponentu kā servera komponentu pēc noklusējuma."use client") only when necessary. This keeps bundles smaller and simplifies testing.

# 2 Saglabājiet robežas skaidras

Use folder naming or filename suffixes to make boundaries explicit:

/components
  /server/ProductDetails.tsx
  /client/AddToCartButton.tsx
  /shared/ReviewStars.tsx

✅ 3. pieņemt suspensiju progresīvai piegādei

Use <Suspense> to stream in non-critical RSCs without blocking the whole page:

<Suspense fallback={<LoadingReviews />}>
  <ReviewList />
</Suspense>

✅ 4. Co-locate logic with components

Nelietojiet sadalīt datus un lietotāja interfeisu failos, ja vien tas nav nepieciešams.asyncloģika tieši sastāvdaļu koka iekšpusē - rāmis rūpējas par pārējo.

✅ 5. Use ISR (Incremental Static Regeneration) smartly

Cache, augstas satiksmes lapām, piemēram, emuāru rakstiem vai mārketinga sadaļām, izmantojiet SSG + atkārtotu validāciju:

export const revalidate = 3600  // regenerate every hour

⚠️ Common Mistakes to Avoid

    Tātad
  • Izmantojot "izmantot klientu" pēc noklusējuma - jūs atkal nonāksit pie CSR
  • 🔸 Datu atgūšana klientu sastāvdaļās, kad to varētu atgūt serveris
  • Pārsūtot pārāk daudz datu starp RSC un klientu komponentiem, izmantojot props - tā vietā ļaujiet klientu komponentiem būt fokusētiem, izolētiem un stāvokļa
  • Tātad
  • Recreating SSR-style getServerSideProps logic inside RSC — no need, RSC is server-side

Lēmumu kopsavilkums

Šeit ir vienkāršots ceļvedis:

Is it interactive?
│
├── Yes → Client Component (CSR)
│
└── No
    │
    ├── Needs per-request data? → SSR
    │
    ├── Can be pre-rendered? → SSG
    │
    └── Otherwise → RSC


Jums nav nepieciešams to atcerēties.Kad esat internalizējis, kā rādīt kartes uz atbildību,the decisions become intuitive.


Labākā prakse nav par "labākās rādīšanas stratēģijas" izvēli.


Tas ir pardesigning rendering as an intentional part of your component architecture— ar skaidrību, mērķi un sniegumu prātā.

6. Looking Ahead: Why RSC Is More Than Just a Feature

Skatīties uz priekšu: kāpēc RSC ir vairāk nekā tikai funkcija

React Server sastāvdaļas nav tikai veiktspējas optimizācija vai DX uzlabošana.they represent a foundational shift in how we build React applicationsLīdzīgi kā React Hooks 2019. gadā, RSC 2025. gadā irredefining the baseline for frontend architectureTātad

🧠 RSC Changes the Mental Model of Building in React

Tradicionālā React izstrāde vienmēr ir balstīta uz šo pieņēmumu:


“The browser owns the runtime. We hydrate everything. Every piece of logic and data must live in the client, or be fetched via API.”


RSC pārkāpj šo pieņēmumu.


With RSC, you now ask:

    Tātad
  • Vai es varu pilnībā izlaist hidratāciju?
  • Vai šo komponentu var palaist tīri uz servera?
  • Tātad
  • Vai es varu izvietot backend loģiku ar savu UI?


Tas dod mums atpakaļthe ability to separate display logic and interactivity cleanly, not with wrappers and workarounds, but with first-class architectural boundariesTātad


It’s no longer “client-first.” It’s “purpose-first.”


Each part of your UI exists where it’s most efficient — server, client, or static.

Ekosistēmas maiņa uz servera pirmo rādīšanu

RSC nenotiek izolēti. plašāka frontend ekosistēma tiek pakļautaserver-first rendering renaissance.


Rāmji kā:

    Tātad
  • Remix smagi piesaistās servera datu ielādēšanai un veidlapas darbībām.
  • Astro pēc noklusējuma pieņem nulle-JS, piegādājot tikai interaktivitātes salas.
  • Tātad
  • Qwik veic hidratāciju līdz galējībām - atlikt visus JS, līdz tas ir skaidri nepieciešams.
  • Next.js 15, ar RSC un App Router, tagad liek komponentu rādīšanu izstrādātāja pieredzes centrā.
  • Tātad


Tas nav nejaušība, tas atspoguļo grūtu patiesību, ko mēs visi esam sajutuši:


Sending less JavaScript is the only way to scale interactivity and performance on the modern web.


React Server Components are the React-native answer to that challenge — deeply integrated, ergonomic, and production-ready.

Ko sagaidīt turpmāk

Kad React 19 un ekosistēma nobriest, mēs varam sagaidīt:

    Tātad
  • Vairāk granulu debugēšanas un profilēšanas rīku RSC kokiem
  • Better DevTools integration to show boundaries and hydration timelines
  • Tātad
  • Higher-order patterns to abstract rendering strategy (e.g., <ServerOnly>, <DeferredClient> wrappers)
  • Tātad
  • Plašāka pieņemšana dizaina sistēmās, sistēmās un bibliotēkās (piemēram, RSC apzinātie UI komplekti)
  • Tātad

Vai jums patika lasīšana?

Ja šis raksts palīdzēja jums domāt atšķirīgi par React un Next.js


Follow me on HackerīteVairāk dziļu dīķu

Hackerīte

Or connect with me on LinkedInlai tērzētu par React, arhitektūru vai RSC migrāciju

Linkolns
L O A D I N G
. . . comments & more!

About Author

Gianna Song HackerNoon profile picture
Gianna Song@gianna
Don’t take the realities of the world for granted :)

PAKARINĀT TAGUS

ŠIS RAKSTS TIKS PĀRSTRĀDĀTS...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks