(*Եթե ցանկանում եք վերցնել եւ ուղղակիորեն վերցնել տեխնիկական սխալը, վերցնել 1. Why React Server Components Were Introduced.)
2010 թ. սկսած, React- ը վերլուծել է Frontend- ի զարգացման հետ, իր deklarative component model- ի եւ արդյունավետ virtual DOM diffing- ի հետ: Այն, ինչ սկսվել է պարզ տեսանյութի գրասենյակին, արագն էր մեծ քանակի մեկ էջային ծրագրերի (SPA- ի) բաղադրիչը: Այս SPAs- ում հիմնականում օգտագործվել են Client-Side Rendering- ը (CSR), որը նշանակում է, որ բեռնել է JavaScript- ի բաղադրիչը, կատարել այն եւ կառուցել UI- ը ամբողջապես հաճախորդի վրա:
Այս client-centric մոդելը հարմարավետ եւ շատ ինտերնետիկ էր, եւ այն որոշել է «դորինական» կայքի ծրագրերը տարիների ընթացքում: Սակայն, քանի որ ծրագրերը աճել են ավելի հարմարավետ եւ ֆունկցիոնալ, CSR- ը սկսել է ցույց տալ, որ իր սխալները:
- Հիմնական
- Longer Time-to-Interactive (TTI): Բարձր JavaScript բաղադրիչները եւ հաճախորդի կողմի աշխատանքը նշանակում են, որ օգտվողները ավելի երկար սպասում են, երբ նրանք կարող են իրականում ինտերնետել էջի հետ: Հիմնական
- Hydration bottlenecks: Converting server-rendered HTML into an interactive app (hydration) դարձել է արդյունավետության ծախսարան, հատկապես քանի որ մանրամասների մանրամասները աճել է. Հիմնական
- Պահպանված բաղադրիչները: Ապրանքներ հաճախ մատակարարել են շատ ավելի JavaScript- ը, քան անհրաժեշտ է, բեռնում են բեռախոսները կոդը համար գործառույթների կամ բաղադրիչների համար, որոնք կարող են մատակարարվել ավելի արդյունավետորեն: Հիմնական
- Ապրանքանիշը, որը չի ծախսում: Ապրանքը ավելի մեծ եւ հարմարավետ է, այնքան դժվար է պահպանել արագ կատարումը բոլոր սարքերում եւ ցանցային պայմաններում: Հիմնական
Next.js- ը հայտնաբերվել է, որպեսզի վերահսկել այդ մի քանի բաղադրատոմսերը, որը ներկայացրել է Server-Side Rendering (SSR), Static Site Generation (SSG), եւ այլ բաղադրատոմսերը: Այս տեխնոլոգիաները բարելավել են առաջին բաղադրատոմսերի ժամանակները եւ փոխել են մի քանի UI rendering աշխատանքը սերվերի համար: Բայց նույնիսկ SSR- ի եւ SSG- ի հետ, հիմնական խնդիրը մնացել է: Մենք դեռ վերահսկել ենք JavaScript- ը բաղադրատոմսերի համար:
Next.js 15- ի հետ, որը աշխատում է React 19- ի վրա, նոր արտադրական պրայթամը ստացել է կենտրոնական սենյակ:React Server Components (RSC)RSC-ները թույլ են տալիս մշակողներին սեղմել server-rendered եւ client-rendered բաղադրիչները մի միակ React tree- ում: Ապրանքները կարեւոր են: Հիմնական մասերը UI- ում այժմ կարող են մաքուր HTML- ում տվել:zero JavaScript overheadԱրդյոք, այդ մասերի համար ոչ մի client-side hydration- ը պահանջվում է: Data picking logic- ը նաեւ հեշտությամբ կատարվում է սերվերի ներքին բաղադրիչների վրա, ինչպիսիք են շատ անսահմանափակ API calls- ի բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների բաղադրիչների համար:
Այս հոդվածը ոչ թե RSC- ի մակարդակի վերլուծություն է: Երբ ես սկսեցի գրել Next.js- ի արդյունավետ օգտագործման մասին 2025- ում, այն արագ բացահայտվել է, որ React Server Components- ը արժանի է մասնագիտացված Deep Dive- ի: Այն, ինչ ներառում է, տեխնիկական ճշգրիտ ուսումնասիրություն է, թե ինչպես RSC- ը աշխատում է սեղմում, թե ինչպես օգտագործել այն Next.js 15- ի նախագծում, եւ թե ինչու դա նշանակում է Frontend- ի դիզայնի հիմնական փոխանցումը:
Մինչեւ վերջը, ես հավատում եմ, որ դուք ստանում եք նույն հուսալիությունը եւ հուսալիությունը RSC-ի համար, ինչ ես ստացել եմ այս գրքի հետազոտության եւ գրքի գործընթացում:
Intro: From CSR to RSC — How Rendering Evolved in React
Հիմնական: CSR- ից RSC- ում: Ինչպես Rendering- ը փոխվել է React- ումՀաջորդ տարիների ընթացքում, թե ինչպես մենք ստեղծում ենք React ծրագրեր, հիմնականում զարգացել է, եւ այնպես էլ, թե ինչպես մենք կարծում ենք rendering- ի մասին:
Customer-Side Rendering (CSR) սարքավորումներ
Ապրիլը ձեռք բերել է իր հայտնիությունըClient-Side Rendering (CSR)— մի մոդել, որտեղ բեռախոսը բեռնում է JavaScript- ը, կատարում է այն, եւ կառուցում է ամբողջ UI-ը հաճախորդի վրա: Այս մեթոդը տալիս է մշակողներին ամբողջական վերահսկողությունը ինտեգրտության եւ պայմանների վրա, եւ հեշտեցնում է դիզայնը դիզայնային մեկ էջային ծրագրերի (SPAs) վրա:
Այսպիսով, CSR- ը հասանելի է միասին:
- Հիմնական
- Հիմնական լիցքավորումը, հատկապես բջջային կամ խոշոր ցանցում Հիմնական
- Լավ SEO- ը Content-Driven Pages- ի համար Հիմնական
- JavaScript- ի հզոր բուլտֆիլներ — նույնիսկ բուլտֆիլների համար, որոնք minimally interactive են Հիմնական
- HTML- ի բեռնելից հետո պահանջվում էր hydration- ի քայլը, որը տեւել է ժամանակը interactive- ում: Հիմնական
Երբեմն, այդ սահմանափակումներ են պարզապես «Ո՞վ են բաները». Այնուհետեւ Next.js փոխել է խաղը.
Ինչպե՞ս Next.js- ը SSR- ի եւ SSG- ի համար առաջարկել է React- ի զարգացման
ԵրբNext.jsԱրդյոք, ինչպիսիք են React- ի առաջին դասընթացը, այն ներառում է Server-side rendering (SSR) եւ Static Site Generation (SSG) որպես առաջին դասընթացների քաղաքները: Սա նշել է վերլուծման վայրը: Frontend- ի մշակողները այժմ կարող են ընտրել, թե ինչպես եւ երբ rendering- ը կատարվում է:
- Հիմնական
- SSR- ը թույլ է տալիս էջերը արտադրել պահանջով, բարելավելով SEO-ը եւ բեռնել արագությունը դինամիկ մատակարարման համար: Հիմնական
- SSG- ը թույլ է տալիս մատակարարման ժամանակ մատակարարել մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակարարված մատակ Հիմնական
- Incremental Static Regeneration- ը (ISR- ը) թույլ է տալիս statistic pages- ի նորաձեւելու համար. Հիմնական
Այս հարմարավետությունը օգնում է մշակողներին ավելի լավ հարմարեցնել կատարման, SEO- ի եւ զարգացման փորձի միջեւ:
Բայց նույնիսկ SSR- ի եւ SSG- ի հետ, նույնիսկ կա մի խնդիր:we were still sending too much JavaScript to the browser— նույնիսկ բաղադրիչների համար, որոնք չեն պետք է ինտերնետային լինել:
React Server Components- ի (RSC) աճը 2025 թվականին
Երբ ազատվել էNext.js 15եւReact 19Մենք ներսում ենք նոր ժամանակը:React Server Components (RSC)Ահա այն, թե ինչպես մենք ստեղծում ենք app- ները.
SSR- ի տարբերությամբ, որը դեռ պահանջում է hydration- ը եւ մատակարարում է JavaScript- ը հաճախորդին,RSC allows you to render components on the server — without sending any JavaScript to the browser at allԱրդյոք
Դա մեծ փոխանակություն է:
- Հիմնական
- Components- ը այժմ կարող է մուտք գործել Server-side տվյալները Հիմնական
- Սատիկ բաղադրիչները չեն պահանջում hydration Հիմնական
- Դուք կարող եք բաղադրել սերվերի եւ հաճախորդների բաղադրիչները մեկ React tree- ում, ստեղծելով ձեր rendering պլաստիկը բաղադրիչների համար: Հիմնական
RSC- ը չի փոխարինում SSR- ը կամ SSG- ը, այնcomplements them, բացահայտելով finer-grained վերահսկողությունը կատարումը, bundle չափը, եւ rendering գործառույթը.
2025-ին, RSC- ը մեկնաբանություն է, որ բոլոր բարձրագույն React- ի ինժեներները պետք է հպարտեն:
1. Why React Server Components Were Introduced
Ինչու է React Server Components- ը տեղադրվելԵրբ React- ի ծրագրերը պլանավորվել են, արդյունաբերությունը սկսել է զգալ իր հաջողության քաշը: Երբ Client-Side Rendering (CSR), Server-Side Rendering (SSR) եւ Static Site Generation (SSG) առաջարկել են տարբեր ռեժիմները կատարյալ վեբ ծրագրերի ստեղծման համար, ամենը ներառում է առեւտրային գործառույթներ, որոնք աճել են ավելի հուսալի քանակում:
CSR- ի, SSR- ի եւ SSG- ի սահմանափակումներ
1 ԱրդյոքHydration overhead
Միայն SSR- ի կամ SSG- ի հետ, երբ HTML-ը հասկանում է բեռնելը, React- ը պետք է «դորել» էջը - տեղադրել գործառույթների լսողները, վերականգնել բաղադրիչները եւ արդյունավետ վերականգնել ծրագրը մոռանումում: Երկու մեծ բաղադրիչների համար, hydration- ը կարող է լինել Time-To-Interactive- ի (TTI) հիմնական բաղադրիչը:
2 ՀյուրատետրJavaScript bundle bloat
CSR- ի հետ, ցանկացած բաղադրիչ, գործիք եւ API-ի զանգվածը, որը էջի մաս է, պետք է ուղարկվի բլոգին, ոչ թե այն, թե ինչ է ինտերնետիկ կամ ոչ: SSR- ը եւ SSG- ը մի քիչ նվազեցնում են այն, բայց մեծ մասը բաղադրիչը դեռ պետք է կատարվի հաճախորդի վրա: Այսպիսով, ինչպես app-ները աճում են, դա կախված է բաղադրիչների վրա, որոնք կախված են օգտվողի փորձը:
3-րդDisconnected data-fetching logic
Հիմնական հարցը, ինչպիսիք են այն, թե ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն.getServerSideProps
կամgetStaticProps
(Տեսանյութ՝ APIsuseEffect
) ստանալ տվյալները, ապա փոխանցել այն components միջոցով props. Այս բաժանման ավելացվել է գիտական overhead եւ դարձել է կոդը դժվար է միասին տեղադրել եւ վերցնել.
Ի՞նչ խնդիրներ RSC- ը նախագծված է լուծել
React Server Components (RSC)- ը ստեղծվել է այս աճող ծախսերի համար պարզ, բայց հզոր գաղափարով:let components execute on the server by default, and only send JavaScript to the browser when it’s absolutely necessaryԱրդյոք
Eliminate unnecessary JavaScript
RSC- ը թույլ է տալիս բաղադրիչների rendering server-sideՈչԵթե մի բաղադրիչ չի պահանջում ինտերնետիկությունը, այն ոչինչ չի պահանջում, որ իր JS բաղադրիչը hydrate կամ բեռնել:
Server-side data access within the component tree
RSC- ը վերցնում է տվյալների վերահսկողության եւ rendering- ի միջեւ սերտիֆիկ գիծը: Server- ի մասերը կարող են օգտագործելasync/await
Արդյոք, դուք կարող եք ուղղակիորեն հասնել տվյալների բազաներ, ֆայլային համակարգեր, կամ API- ում - co-locating տվյալները եւ տեսնել լոգին自然, առանց անհրաժեշտության API- ի ճանապարհների կամ prop բորում.
Improve rendering efficiency and developer experience
Միացյալ բաղադրիչները կարող են ստեղծել ավելի հեշտ ծրագրեր, ավելի փոքր բաղադրիչների եւ ավելի լավ կատարման հետ: RSC- ը նաեւ հեշտեցնում է բաղադրիչների մոդելը: Դուք պարզապես գրում եք բաղադրիչները, եւ թույլ եք տալիս, որ բաղադրիչները կառավարել են այն, թե որտեղ նրանք աշխատում են եւ թե ինչպես նրանք ուղարկել են:
RSC- ը չպետք է փոխարինել SSR- ը կամ SSG-ը, այլն, այն մատակարարում է նրանց: Այն թույլ է տալիս Ձեզ մտածելat the component level, ոչ միայն էջային մակարդակի մասին, թե ինչ պետք է գործել սերվերի եւ ինչ պետք է ներառում է բեռնել.
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
Next.js 15- ում Rendering Strategies: RSC vs SSR vs CSRNext.js 15- ը առաջարկում է մշակողներին granular rendering մոդել, որը հասանելի է շատ ավելի շատ, քան բնական էջային մակարդակի ռեժիմներ:React Server Components (RSC)Որքան կարեւոր է, թե ինչպե՞ս են նրանք համեմատվել երկու հայտնի մոդելների հետ:Server-Side Rendering (SSR)եւClient-Side Rendering (CSR)Արդյոք
Երբ SSG (Static Site Generation) դեռ կարեւոր է որոշ դեպքերում, այն կարող է տեսնել որպեսcaching strategyԲարձրացվել է SSR- ի վրաRSC vs SSR vs CSRՆրանք ներառում են տարբեր Runtime rendering ճանապարհներ, եւ իմանալ, որ նրանք կարեւոր են, որպեսզի կատարման եւ դիզայնի իմանալ ընտրություններ 2025.
💡 Երբ մենք համեմատենք: Ի՞նչ է նշանակում «Interactive Component»- ը:
React- ի եւ Next.js- ի մասինinteractive componentՈ՞վ է այն Element, որըrequires client-side JavaScript to respond to user input or browser eventsԱրդյոք
Սա ներառում է ( բայց ոչ միայն):
- Հիմնական
- Տեղադրիչները, որոնք update state on click Հիմնական
- Validation- ի կամ Controled Inputs- ի ձեւեր Հիմնական
- Մոդելներ եւ մոդելներ, որոնք փոխանցում են open/closed Հիմնական
- Արդյոք, ինչպիսիք են scrolling կամ hover Հիմնական
- Տեղադրիչներ, carousels, Filters, Sliders Հիմնական
- Նկարներ, որոնք օգտագործում են useState, useEffect կամ useReducer Հիմնական
Եթե մի մասը ունիevent handlersՄիջազգայինstateԱրդյոք, կամ հավատում է, որDOM or browser APIsԱյն պետք է կատարվի հաճախորդի վրա.
Interactivity = Browser-side behavior + JS event listeners + local state.
Այս տարբերությունը օգնում է բացահայտելwhy RSC exists: Ձեզ պետք է ստանալ JavaScript- ը այն UI-ների համար, որոնք չեն պետք է ինտերնետային լինել:
Մոդելերը տեսնում են
ՀիմնականՏեսակ RSC (React Server Components) SSR (Server-Side Rendering) CSR (Client-Side Rendering) Render Location Server Server Client JavaScript ուղարկվել է բրիտորին ❌ ոչ ✅ ոչ ✅ ոչ ✅ ոչ ✅ ոչ ✅ ոչ ✅ ոչ ✅ ոչ ✅ Full ✅ Full ✅ Full Access to server resources ✅ Direct ✅ Via getServerSideProps ✅ Needs API calls When it runs On-demand or streamed Per request On load in browser Ideal case use Static or data-bound views Personalized or dynamic UI Interactive flows, local UXՆկարագրություն
Նկարագրություն
RSC (React Server Components) սարքավորումներRSC (React Server Components) սարքավորումներ
ՀիմնականSSR (Server-Side Rendering) սարքավորումներ
SSR (Server-Side Rendering) սարքավորումներ
ՀիմնականCSR (Client-Side Rendering) սարքավորումներ
CSR (Client-Side Rendering) սարքավորումներ
Տեղադրել Server Server ClientՏեղադրեք տեղըՏեղադրեք տեղը
Հիմնականսերտիֆիկ
սերտիֆիկ
սերտիֆիկսերտիֆիկ
ՀիմնականԳլխավոր
Գլխավոր
JavaScript- ը ուղարկվել է browser- ի համար ոչ ✅ ոչ ✅ ոչՀիմնականJavaScript-ը ուղարկվել է Browser- ում
JavaScript-ը ուղարկվել է Browser- ում
ՀիմնականՈչ ոք
Ոչ ոք
ԱրդյոքԱրդյոք
ԱրդյոքԱրդյոք
Խնդրում ենք hydrationԽնդրում ենք hydrationԽնդրում ենք hydration
ԱրդյոքԱրդյոք
ԱրդյոքԱրդյոք
ԱրդյոքԱրդյոք
Հիմնականինտերնետային
ինտերնետային
ՀիմնականԱրդյոք
Արդյոք
ՀիմնականԱրդյոք
Արդյոք
Հիմնական✅ Full
Արդյոք
Հեղինակային ծառայություններ ✅ Direct ✅ Via getServerSideProps ✅ Needs API callsServer Resources- ի հասկանալը
Server Resources- ի հասկանալը
Արդյոք✅ Direct
ՀիմնականՀիմնական հոդված՝ GetServerSideProps
Հիմնական հոդված՝ GetServerSideProps
ՀիմնականԱրդյոք պետք է API calls
Արդյոք պետք է API calls
Երբ այն կատարվում է On-demand կամ Streamed Per request On load in browserԵրբ գնում էԵրբ գնում է
ՀիմնականOn-Demand կամ Streamed
On-Demand կամ Streamed
ՀիմնականՀիմնական պահանջում
Հիմնական պահանջում
Բեռնել Browser- ումԲեռնել Browser- ում
Հիմնական օգտագործման բաղադրիչ Statistical or data-bound views Customized or dynamic UI Interactive flows, local UXՀիմնականՀիմնական օգտագործման Case
Հիմնական օգտագործման Case
ՀիմնականStatistical կամ data-bound տեսումներ
Statistical կամ data-bound տեսումներ
Մասնավոր կամ բնական UI
Մասնավոր կամ բնական UI
ՀիմնականInteractive Flows, տեղական UX
Interactive flows, local UX
🔍 Think in Components, Not Just Pages
Next.js- ի նախորդ տարբերակներում, rendering strategies- ը օգտագործվել էpage level. You had getServerSideProps
ՀիմաgetStaticProps
Ո՞վ եք ընտրել, պետք է օգտագործեքentire pageԴա նշանակում էր մի աշխարհում, որտեղ rendering- ը կատարվում է ամեն ինչ կամ ոչինչ - այնպես էլ statistically է build- ի ժամանակ, կամ dynamically է յուրաքանչյուր պահանջում.
But with React Server Components (RSC)եւ Theapp/
Next.js 13+- ում տեղադրվել եւ 15- ում ստանդարտվել էrendering is no longer a top-down, one-size-fits-all decisionԴա դարձնում է aper-component concern that unlocks a new mindset.
A New Way of Thinking: Declarative եւ Composable Rendering- ը
Այս փոխանակը ավելի շատ է, քան API-ի փոխանակը, այն է դիզայնային փոխանակը, թե ինչպես եք ստեղծել ձեր frontend- ը:
Declarative
Օգտագործելով OrchestratingԻնչպեսեւԻնչպե՞սԱրդյոք բաղադրիչները մանրաձայնորեն փոխվում են, ապա դուք պարզապեսdeclare what each component does and what it needs— React- ը եւ Next.js- ը վերցնում են ամենը.
You don’t manually wire up API endpoints or pass props from SSR to components. You can just write:
// Server Component
export default async function ProductInfo() {
const product = await db.getProduct(slug)
return <div>{product.name}</div>
}
Այս մասը:
- Հիմնական
- Գնացվում է Server- ում Հիմնական
- Doesn’t send JS to the client Հիմնական
- Նրանք չեն պահանջում GetServerSideProps կամ API մակերեսը Հիմնական
- «Ես միայն մի մաս» - ոչ մի լրացուցիչ abstraction անհրաժեշտ է
You describe the UI and its data needs declaratively, եւ rendering մեքենա նշում է մյուսը.
Composable
Ձեր UI-ի տարբեր մասերը կարող են օգտագործել տարբեր ռեժիմման պլաստակներ -on the same pageՀիմաat the same time, and with minimal overheadԱրդյոք
For example:
// Product page layout
<ProductInfo /> // Server Component (no JS, rendered on the server)
<AddToCartButton /> // Client Component (interactive)
<SimilarProducts /> // Static Component (SSG with revalidation)
Այս բաղադրիչները միասին ապրում են միասին, բայց յուրաքանչյուրը:
- Հիմնական
- Runs in a different environment (server, client, build)
- Օգտագործեք միայն այն տվյալները եւ կոդը, որը անհրաժեշտ է Հիմնական
- Գործիքները պարզապես այն են, ինչ պահանջվում է բեռնելը - ոչ ավելի, ոչ ավելի
Այս մասին ավելի ճշգրտության համար, ես ստեղծել եմ միՀիմնական DemoԴա ցույց է տալիս, թե ինչպիսիք են տարբեր ռեժիմումային ռեժիմները, որոնք կարող են միասին ապրել մեկ էջում:
3. How React Server Components Work Under the Hood
Ինչպես React Server Components- ը աշխատում է կոճի տակReact Server Components (RSC)- ը ավելի քան մի նոր արտադրական պլաստիկ է: Նրանք հիմնականում փոխում են, թե ինչպես արտադրվում են, արտադրվում են եւ փոխանցում են նյութական խոշորները: RSC- ի արդյունավետ օգտագործման համար արտադրության մեջ կարեւոր է իմանալhow it works behind the scenes and how it impacts the boundaries of state, interactivity, and data.
Server/Client Boundary: A Split React Tree- ը
React applications using RSC are no longer fully rendered on the client. Instead, the component tree is split into two worlds:
- Հիմնական
- Server Components: Execute only on the server. No JavaScript is ever sent to the browser. Cannot hold local state or attach event listeners. Perfect for rendering static content and server-bound logic (e.g., DB access). Հիմնական
- Client Components- ը `Use Client- ը`-ն է, որը հարմարեցված է browser-friendly JavaScript- ում եւ աջակցում է ամբողջական ինտեգրտությունը, տեղական կարգը, useEffect- ը եւ գործառույթների կառավարումը:
Երբ build- ում կամ runtime- ում, React- ը կառուցում է մի տուն, որտեղ server- ի եւ client- ի բաղադրիչները միասին ապրում են, եւ վերցնում են այն միասին rendering- ի ընթացքում:
📍 What "use client"
Հատկանում է
When you add "use client"
Դա նշում է, որ ամբողջ մոդելը եւ իր արտահանողները որպեսclient-onlyNext.js- ի բաղադրիչը կարող է ստեղծել:
- Հիմնական
- Փոխրեք այդ ֆայլը ( եւ նրա կախվածություններները) բացասական JavaScript bundle- ում Հիմնական
- Արդյոք, այս գործառույթը բացահայտվում է սերվերի վրա: Հիմնական
- Տեղադրեք այն որպես Classic React CSR բաղադրիչ, որը hydration logic Հիմնական
Այս կարգը աշխատում է որպեսboundary markerԲոլոր բաղադրիչները վերեւում կարող են արտադրվել սերվերի կողմից; բոլոր բաղադրիչները ներքեւում պետք է արտադրվում են բաղադրիչում:
Streaming: Rendering in Pieces, ոչ բոլորը մեկ անգամ
RSC-ի հետազոտություններstreamingԻնչպե՞ս կարող եք վերցնել սերտիֆիկը, այնպես որ, թե ինչպես կարող եք վերցնել սերտիֆիկը, թե ինչպես կարող եք վերցնել սերտիֆիկը:streams serialized fragmentsԱվելի լավ է, որ հաճախորդը պատրաստ է.
- Հիմնական
-
Server Components are rendered and sent as soon as possible
Հիմնական - Տեղադրիչները (հարկե <Suspense>- ի միջոցով) տեւել են Հիմնական
- Client Components- ը հիդրավլիկ է, միայն այն ժամանակ, երբ նրանք բեռնում են
✅ How is this possible?
RSC- ը առաջարկում է ընտրական hydration- ը: Երբ Client Component- ը rendered է Server Component tree- ում, React- ը տեղադրում է տեղադրիչը (<div data-rsc-placeholder />) եւ փոխանցում է hydration- ը:
Երբ հաճախորդը բեռնում է համապատասխան JS bundle:
- React lazily բեռնում է այս հատուկ նյութը Հիմնական
- Տեղադրում է տեղադրողը եւ սեղմում է այն կյանքի խնամին Հիմնական
- Մխիթարեցրեք այն միասին, առանց վերադառնալ ամբողջ էջը
This design is decoupled and progressive: Ձեր ծրագիրը արագ սկսվում է, եւ ինտեգրտությունը առնվազն է առնվազն.
<Suspense fallback={<LoadingDetails />}>
<ProductDetails /> // Server Component
</Suspense>
<AddToCartButton /> // Client Component (hydrated later)
⚙️ Data Fetching and Code Splitting in RSC
Ավելի կարեւոր «մատիկ» RSC-ի մասին:you can fetch data directly inside components withՀիմնականasync/await
Ոչ հավատում էgetServerSideProps
ՀիմաuseEffect
, or manual prop-passing.
// Server Component
export default async function Dashboard() {
const stats = await getStatsForUser()
return <StatsView data={stats} />
}
Ինչո՞ւ դա հնարավոր է։
- RSC բաղադրիչները աշխատում են որպես իրական սերվերի գործառույթներ, ոչ թե հաճախորդի compiled մոդուլներ: Հիմնական
- Նրանք կարող են ստանալ տվյալների բազաններ, ներքին API-ներ, ֆայլային համակարգեր, կամ ինչ-որ բան, որը ձեր սերվերի Runtime աջակցում է
- The result is rendered HTML (not JS) and streamed to the client Հիմնական
Also:
- Հիմնական
- No hydration needed, since the result is static Հիմնական
- No loading UI logic in the component itself — everything resolves before it hits the browser Հիմնական
- Ոչ մի կոդը այս բաղադրիչի համար ուղարկվում է հաճախորդի համար, եթե ոչ մի հաճախորդի բաղադրիչ չի տեղադրվում Հիմնական
Այսպիսով կարեւորորեն նվազեցնում է boilerplate- ի եւ bundle- ի չափը, իսկ անում է logic- ի հետ UI- ի հետ: React- ի երկարազոտական նպատակը վերջապես կատարվել է քանակում:
🚫 State, Hooks, and Lifecycle Considerations
RSC does not supportՏեսակներ React HooksuseState
, useEffect
, or useRef
Քանի որ նրանքdon’t run in the browserԱրդյոք
(Մենք պետք է բաղկացած ենք ազդեցությունների մեջ)
ՀիմնականՀիմնականՀիմնականՀիմնականEvent handlers
ՀիմնականՀիմնական✅
ՀիմնականՀիմնականFeature
ՀիմնականServer- ի գործառույթը
ՀիմնականՀաճախորդի մասըՀիմնականՀիմնականFeature
Feature
ՀիմնականServer- ի գործառույթը
Server- ի գործառույթը
Հաճախորդի մասըՀաճախորդի մասը
Օգտագործման
Օգտագործման
useState
useEffect
useEffect
❌
❌
useContext
useContext
(Եթե ստանդարտ է)
✅
Հիմնականasync / վախենումՀիմնականՀիմնականՀիմնական(Մենք պետք է բաղկացած ենք ազդեցությունների մեջ)
Հիմնականasync / վախենումasync/await
❌ (should wrap in effects)
(Մենք պետք է բաղկացած ենք ազդեցությունների մեջ)
ՀիմնականՀիմնականEvent handlers
ՀիմնականՀիմնականՀիմնականՀիմնականEvent handlers
Event handlers
❌
✅
✅
This enforces a clean separation of responsibilities:
- Հիմնական
- Server Components: Data եւ Layout
- Client Components: Interactivity եւ Local State Հիմնական
React Server Components- ը նախագծված է ձեր ծրագրի հեշտացնելով: Երբ դուք ինտեգրել եք սահմանափակման պայմանները, բեռնել մոդելը եւ async տվյալների հասնելը, դուք կարող եքcompose fast, personalized, and minimal-JS appsՇատ ավելի քիչ վառելիք է, քան առաջ.
4. What’s the Best Practice? Combining RSC, SSR, and SSG
4. Ի՞նչ է լավագույն գործառույթը: RSC, SSR եւ SSG- ի համատեղOne of the most common questions React engineers face in Next.js 15- ը չէ «Ես պետք է օգտագործեմ RSC- ը»:“how do I combine RSC with SSR and SSG in a maintainable, high-performance way?”
Next.js 15-ի գեղեցկությունը այն է, որ դուք դեռ չեք ընդգրկված մեկ ռեժիմման պլաստիկի համար էջում: Այժմ դուք կարող եքcompose rendering strategies at the component level, օգտագործելով ամենամեծ հարմարավետ մեթոդը UI-ի յուրաքանչյուր մասի համար:
This section introduces a practical framework for making that decision based on actual architectural needs.
🧭 Start with the Core Question: What does this component need?
Ask these four questions for every component:
- Հիմնական
- Does it need to be interactive?
- ✅ Yes → Use a Client Component
- Արդյոք այն պետք է անվտանգ, պահանջի մասնավոր, կամ իրական ժամանակի տվյալները: ✅ Ահա → Կարդալ SSR Հիմնական
- Can it be precomputed or infrequently updated?
- ✅ Yes → Prefer SSG
Հիմնական - Does it fetch server data but never need to run on the client?
- ✅ Yes → Use RSC
Ապրանքի էջի ռեժիմը Breakdown
Այսպիսին է, թե ինչպես կարող է տպավոր էլեկտրոնային բիզնեսի արտադրանքի էջը ստեղծվել, օգտագործելով բոլոր երեք ռեժիմները:
ՀիմնականՀիմնականՀիմնական |
Արդյունաբերական ռեժիմ |
Reason |
---|---|---|
|
RSC |
Fetched from DB, no interactivity, no need to hydrate |
Հիմնական
|
SSR |
Depends on user session, dynamic per request |
ԱրդյունքներButton | CSR-ն | Հիմնական Requires interactivity and local state |
|
SSG (with ISR) | Հիմնական Անվտանգ է սխալել build-time, կարող է վերականգնել ամեն 24 ժամ կամ ամեն Tags |
|
RSC + streaming |
Frequently changing, streamed in with Suspense to not block TTFB |
Ապրանքի մանրամասներ
RSC
ՀիմնականԲացվել է DB- ից, ոչ interactivity, ոչ պետք է hydrate
PriceWithPersonalization SSR- ը հիմնված է օգտվողի կայքում, մանրաձայնային պահանջի համարՀիմնականԱրդյունքներButtonՀիմնականCSR-նՀիմնականՆրանք պահանջում են ինտերնետությունը եւ տեղական տարածք
ՀիմնականՀիմնականRelated ԱպրանքներSSG (Մի հետ ISR)
ՀիմնականԱնվտանգ է սխալել build-time, կարող է վերականգնել ամեն 24 ժամ կամ ամեն Tags
ՀիմնականStockStatusBanner RSC + streaming Հատկապես փոխվում է, Streamed in with Suspense to not block TTFBՀիմնականՀիմնական հոդված՝ Strategic ReasonՀիմնականComponent
Արդյունաբերական ռեժիմ
Արդյունաբերական ռեժիմ
Reason
Reason
ProductDetails
RSC
Fetched from DB, no interactivity, no need to hydrate
Ապրանքի մանրամասներ
ProductDetails
RSC
RSC
ՀիմնականԲացվել է DB- ից, ոչ interactivity, ոչ պետք է hydrate
Բացվել է DB- ից, ոչ interactivity, ոչ պետք է hydrate
ՀիմնականՀիմնականՊաշտպանություն
SSR
Depends on user session, dynamic per request
ՀիմնականՊաշտպանություն
PriceWithPersonalization
SSR
SSR
Տեղադրվում է օգտագործող սենսացիոնով, մանրաձայնային պահանջով
Depends on user session, dynamic per request
ԱրդյունքներButtonՀիմնականCSR-նՀիմնականRequires interactivity and local state
ԱրդյունքներButtonAddToCartButton
CSR
ՀիմնականRequires interactivity and local state
Նրանք պահանջում են ինտերնետությունը եւ տեղական տարածք
ՀիմնականRelated ԱպրանքներSSG (Մի հետ ISR)
ՀիմնականԱնվտանգ է սխալել build-time, կարող է վերականգնել ամեն 24 ժամ կամ ամեն Tags
Related ԱպրանքներRelatedProducts
SSG (Մի հետ ISR)
SSG (with ISR)
ՀիմնականԱնվտանգ է սխալել build-time, կարող է վերականգնել ամեն 24 ժամ կամ ամեն Tags
Անվտանգ է սխալել build-time, կարող է վերականգնել ամեն 24 ժամ կամ ամեն Tags
ԲրիտանիաBanner
ՀիմնականRSC + Streaming- ըՀիմնականՀիմնականFrequently changing, streamed in with Suspense to not block TTFB
ԲրիտանիաBanner
StockStatusBanner
RSC + streaming
ՀիմնականFrequently changing, streamed in with Suspense to not block TTFB
Frequently changing, streamed in with Suspense to not block TTFB
Each component is doing just what it needs to do— ոչ ավելի, ոչ ավելի, ոչ ավելի: Չնայած ամբողջ էջի hydration, ոչ մի ամբողջ աշխարհում տվյալների վերցնել, ոչ մի անսահմանափակ JavaScript.
Դիզայն Best Practices- ի համար միասնական ռեժիմներ
1. Start Server-First սարքավորումներ
Design every component as a Server Component by default. Opt into interactivity ("use client"
) միայն այն ժամանակ, երբ անհրաժեշտ է: Այսպիսով պտուտակները փոքր են եւ հեշտությամբ փորձարկվում են:
2. Կարդացրեք գծերը
Use folder naming or filename suffixes to make boundaries explicit:
/components
/server/ProductDetails.tsx
/client/AddToCartButton.tsx
/shared/ReviewStars.tsx
✅ 3. Embrace Suspense for progressive delivery
Օգտագործեք<Suspense>
to stream in non-critical RSCs without blocking the whole page:
<Suspense fallback={<LoadingReviews />}>
<ReviewList />
</Suspense>
✅ 4. Co-locate logic with components
Կարդացեք, թե ինչ պետք է անել եւ թե ինչ պետք է անել, եթե դուք չգիտեք, թե ինչ պետք է անել:async
Հատկությունը մուտքի մուտքի մեջ, բաղադրիչը վերցնում է ամենը:
ISR- ի (Incremental Static Regeneration) օգտագործումը
For cacheable, high-traffic pages like blog articles or marketing sections, use SSG + revalidation:
export const revalidate = 3600 // regenerate every hour
️ Գործիքներ, որոնք պետք է փնտրեն
- Հիմնական
- Օգտագործելով «Use client» ստանդարտորեն — դուք կստանաք CSR- ի հետ ամեն ինչ
- ❌ Fetching data in client components when it could be server-fetched
- ❌ Passing too much data between RSC and client components via props — instead, let client components be focused, isolated, and stateful Հիմնական
- ❌ Պահպանելու SSR-style getServerSideProps logic ներսում RSC — ոչ մի անհրաժեշտություն, RSC է server-side
✅ Decision Tree Կասկածություն
Here’s a simplified guide:
Is it interactive?
│
├── Yes → Client Component (CSR)
│
└── No
│
├── Needs per-request data? → SSR
│
├── Can be pre-rendered? → SSG
│
└── Otherwise → RSC
Երբ դուք ինտեգրել եք, թե ինչպե՞ս թարմացնել քարտերը,the decisions become intuitiveԱրդյոք
The best practice isn’t about picking “the best rendering strategy.”
Դա մասինdesigning rendering as an intentional part of your component architecture— Սպիտակության, նպատակների եւ կատարման համար:
6. Looking Ahead: Why RSC Is More Than Just a Feature
6. Looking Ahead: Why RSC Is More Than Just a FeatureReact Server Components- ը ոչ միայն արդյունավետության optimization- ը կամ DX- ի բարելավումը է:they represent a foundational shift in how we build React applicationsԱվելին նման է React Hooks- ի 2019 թ., RSC- ը 2025 թ.redefining the baseline for frontend architectureԱրդյոք
RSC- ը փոխում է Building in React- ի հոգեկան մոդելը
Պայմանական React- ի զարգացման միշտ կառուցվել է այս հավատում:
“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-ն սխալում է այդ հավատում:
RSC- ի հետ, դուք այժմ հարցում եք:
- Հիմնական
- Can I skip hydration entirely? Հիմնական
- -Ինչպե՞ս կարող է սերտիֆիկը աշխատել սերտիֆիկի վրա: Հիմնական
- Can I colocate backend logic with my UI? Հիմնական
Դա մեզ վերցնում էthe ability to separate display logic and interactivity cleanly, not with wrappers and workarounds, but with first-class architectural boundariesԱրդյոք
It’s no longer “client-first.” It’s “purpose-first.”
Ձեր UI-ի յուրաքանչյուր մասը գտնվում է այնտեղ, որտեղ այն առավել արդյունավետ է - սերվեր, հաճախորդ, կամ ստատիկ.
Ecosystem Shift Toward Server-First Rendering- ը
RSC- ը ոչինչ չի կատարվում միասին: Բարձրագույն Frontend- ի էլեկտրոնային համակարգը կատարվում է:server-first rendering renaissanceԱրդյոք
Frameworks like:
- Հիմնական
- Remix- ը լայնորեն ներառում է սերվերի տվյալների բեռնելը եւ ձեւավորման գործառույթները: Հիմնական
- Astro- ը սեղմում է Zero-JS- ը սեղմելով միայն interactivity- ի նավահանգներ: Հիմնական
- Qwik- ը ջերմաստիճան վերցնում է ամենամեծ - բոլոր JS- ից մինչեւ բացառապես անհրաժեշտ է: Հիմնական
- Next.js 15, with RSC and App Router, now puts per-component rendering at the center of the developer experience. Հիմնական
Սա ոչ մի սխալն է, դա մի ճշմարտություն է, որը մենք բոլորս զգում ենք:
Sending less JavaScript is the only way to scale interactivity and performance on the modern web.
React Server Components- ը React- ի բնական պատասխանն է այդ փորձի համար - հստակորեն ներգրավված, անգլոնիկ եւ արտադրական պատրաստ է:
🔮 What to Expect Next
Քանի որ React 19-ը եւ էլեկտրոնային համակարգը մոռանում են, մենք կարող ենք սպասել, որ:
- Հիմնական
- Ավելի մանրամասական debugging եւ profiling գործիքներ RSC փակների համար Հիմնական
- Լավագույն DevTools ինտեգրումը, որը ցույց է տալիս սահմանները եւ hydration timelines Հիմնական
- Higher-order մոդելներ abstract rendering ռեժիմերի (հարկե, <ServerOnly>, <DeferredClient> փաթեթներ) Հիմնական
- Բարձր օգտագործումը դիզայնային համակարգերի, սարքավորումներների եւ գրասենյակների մեջ (հարկե, RSC-aware UI kits) Հիմնական
Արդյոք սիրում եք կարդալ։
Եթե այս հոդվածը օգնում է Ձեզ փոխել React- ի եւ Next.js- ի մասին
Follow me on Hackerի մասին for more deep dives
Hackerի մասինOr connect with me on LinkedInԽաղալ React, architecture, կամ RSC մigration մասին
LinkedIn