React Server Components är komponenter som exekveras enbart på servern, aldrig i webbläsaren, vilket betyder att deras kod aldrig når klientens JavaScript-bundle. Resultatet är mindre bundlar och snabbare Time to Interactive, eftersom webbläsaren slipper ladda och tolka kod den ändå inte behöver köra. I praktiken märks det som en app som känns klar tidigare, vilket Next.js | Geekfactor förklarar väl i sin genomgång av ramverket. Next.js App Router bygger hela sin standardarkitektur kring detta.
Kort sagt:
- React Server Components exekveras endast på servern, vilket minskar klientens JavaScript-bundel och möjliggör snabbare tid till interaktivitet.
- Gränsen mellan server och klient bestäms med
'use client', och beroenden påverkas av var denna direktiv placeras i kodträdet.- Effektiv datahämtning sker när flera komponenter hämtar sin data parallellt, vilket minskar onödiga API-anrop och förbättrar prestanda.
- Server Components kan inte använda webbläsar-API:er eller hooks som
useStateochuseEffect, och felplacering av'use client'kan leda till större klientbundlar.- Den största vinsten ligger i att eliminera JavaScript till klienten för serverrenderade delar, vilket förbättrar laddningstider och säkerheten för hemligheter.
Innehållsförteckning
- Vad är React Server Components egentligen?
- RSC-payload, gränsen mellan server och klient, och streaming
- Så använder du RSC i praktiken med Next.js
- Regler och vanliga fallgropar att undvika
- Vad du faktiskt vinner i prestanda och säkerhet
- När ska du inte använda Server Components?
- Hur Hivecreatives använder RSC i kundprojekt
- Var konventionell visdom missar poängen
- Källor
- Vanliga frågor
Vad är React Server Components egentligen?
En React Server Component (RSC) körs uteslutande på servern och har fri tillgång till serverresurser: databaser, filsystem, hemliga API-nycklar och interna tjänster, utan att någon av dessa detaljer behöver exponeras för klienten. Komponentens kod skickas aldrig till webbläsaren, och det är den avgörande skillnaden mot traditionell server-side rendering (SSR).
Vid klassisk SSR renderar servern HTML som ett första steg, men webbläsaren måste sedan ladda ner hela komponentens JavaScript för att kunna “hydrera” den, det vill säga göra den interaktiv igen. Med React Server Components sker ingen hydrering av serverdelen alls, för koden fanns aldrig i klientbunden till att börja med.
Några begrepp du bör känna igen:
- Server Component: renderas endast på servern, kan använda
async/awaitdirekt i komponentkroppen. - Client Component: markeras med direktivet
'use client', körs i webbläsaren och kan hantera state och interaktion. - Server/klient-modulgraf: React håller reda på vilka moduler som hör till servern och vilka som ska bunta för klienten.
- RSC-payload: den serialiserade struktur som servern skickar istället för komponentkod.
RSC-payload, gränsen mellan server och klient, och streaming
Kommunikationen mellan server och klient sker via en serialiserad struktur som kallas RSC-payload. Den innehåller det renderade resultatet, referenser till vilka Client Components som ska monteras, samt serialiserade props till dem. Klienten kan rekonciliera trädet utifrån den strukturen utan att någonsin få servrarnas komponentkod, vilket Next.js dokumentation beskriver som kärnan i hur App Router fungerar.
Gränsen mellan server och klient sätts med direktivet 'use client' överst i en fil. Allt som importeras från den filen, och allt den filen själv importerar, buntas för klienten. Det gör gränsdragningen till en bundlingsfråga, inte bara en kodstilsfråga: sätter du 'use client' för högt upp i komponentträdet drar du med dig fler beroenden än du tror.
Streaming och Suspense gör att servern kan skicka delar av sidan innan allt data är klart. En sida kan visa navigation och sidhuvud direkt, medan en långsam datakälla fortsätter ladda i bakgrunden bakom en Suspense-boundary.
Statistik att ta med sig: eftersom Server Components aldrig bidrar till klient-JS-bundlen kan appar med mycket serverrenderat innehåll skära bort betydande mängder JavaScript som annars skulle laddas i onödan, direkt kopplat till React-dokumentationens beskrivning av hur RSC exkluderas från bunten.
- Suspense-boundary avgör var streaming “pausar” och visar en laddningsindikator.
- Data kan strömmas i den ordning den blir klar, inte i den ordning komponenterna står i koden.
- Långsamma anrop blockerar inte längre hela sidan, bara sin egen del av trädet.
Så använder du RSC i praktiken med Next.js
I Next.js App Router är varje komponent en Server Component som standard. Du behöver inte skriva någon särskild kod för att få fördelarna, det är 'use client' som är undantaget, inte regeln. Det här är designval från Next.js egen dokumentation, och det är den enskilt viktigaste skillnaden mot äldre React-projekt där allt kördes i klienten som standard.
Ett vanligt mönster ser ut ungefär så här:
- En async Server Component hämtar data direkt med
awaitmot en databas eller ett API. - Servern skickar resultatet vidare som props, eller som en Promise, till en mindre Client Component längre ner i trädet.
- Client-komponenten läser Promise-värdet med hooken
use()och hanterar interaktionen, till exempel klick eller formulärfält. - Bara den lilla interaktiva delen buntas till klienten, resten stannar på servern.
Server Actions är det andra stora mönstret att lära sig. De låter dig skriva serverfunktioner som anropas direkt från formulär eller knappar, utan att du behöver bygga en separat API-rutt för varje mutation. Det ersätter en hel del av det bygg-en-endpoint-och-fetch-den-mönster som React-utvecklare vant sig vid i över ett decennium.
Proffstips: Bygg gärna en tunn “klient-wrapper” runt globala providers (till exempel för temahantering eller notiser) istället för att sätta 'use client' på hela layoutfilen. Då slipper du dra in hela sidträdet i klientbunten bara för att en enda kontext behövs.
Regler och vanliga fallgropar att undvika
Server Components kan inte använda klient-side hooks som useState, useEffect eller useContext, och de kan inte anropa webbläsar-API:er som window eller localStorage. Det är inte en begränsning i React som sådan, utan en logisk konsekvens av att koden aldrig körs i en webbläsare, en poäng DebugBears genomgång av RSC lyfter tydligt.
Den vanligaste nybörjarfällan är att sätta 'use client' för högt upp i filstrukturen, oftast i en layoutfil eller en delad wrapper, vilket drar in stora delar av appen i klientbunten och gör hela poängen med RSC om intet. Praktiker som Josh W. Comeau har observerat att det här mönstret är ett av de mest kostsamma man kan göra i ett RSC-projekt.
Ett annat vanligt fel är att försöka importera en Server Component direkt i en klientfil. Det går inte, för servermodulen finns inte i klientens modulgraf. Lösningen är nästan alltid att skicka serverrenderat innehåll som children eller props nedåt, snarare än att importera det uppåt.
- Kontrollera felmeddelanden noga: de pekar oftast direkt på vilken fil som saknar eller felaktigt har
'use client'. - Om ett fel klagar på en hook “utanför en Client Component” är lösningen nästan alltid att flytta just den lilla interaktiva biten till sin egen klientfil.
- Testa gärna att bygga applikationen och granska bundle-storleken innan och efter en ändring, det avslöjar snabbt om ett
'use client'läckt för brett.
Vad du faktiskt vinner i prestanda och säkerhet
Den mest konkreta vinsten är att Server Components inte bidrar med en enda rad till klientens JavaScript-bundle, vilket React-teamets egen dokumentation slår fast som designmål. Mindre JavaScript att ladda ner och tolka ger snabbare Time to Interactive, särskilt märkbart på mobilnät och äldre enheter.
Konkret siffra: Next.js deduplicerar identiska fetch-anrop inom samma renderpass. Om tre olika komponenter i samma träd behöver samma data, till exempel en inloggad användares profil, görs anropet bara en gång i stället för tre. Det minskar onödig belastning mot backend och databaser rejält jämfört med motsvarande client-side fetch-mönster.
- Hemligheter som API-nycklar och databasuppgifter behöver aldrig serialiseras till klienten.
- Server-only-kod kan importera bibliotek som annars aldrig skulle vara säkra att skicka till en webbläsare.
- Parallell datahämtning blir enklare att resonera om, eftersom flera Server Components kan hämta sin egen data samtidigt istället för i en kedja.
Effekten på teknisk SEO är också värd att nämna: snabbare TTI och mindre JavaScript att exekvera brukar synas direkt i Core Web Vitals-mätningar.
När ska du inte använda Server Components?
Allt som kräver lokal state, omedelbar interaktion eller realtidsuppdateringar hör hemma i en Client Component. Formulärfält med validering i realtid, dra-och-släpp-gränssnitt och chattfönster med live-uppdateringar är typiska exempel där servern helt enkelt inte kan hjälpa dig.
Det finns också arkitektoniska situationer där RSC ger liten eller ingen fördel: om dina datahämtningar är strikt sekventiella, där varje anrop väntar på föregående, försvinner mycket av parallelliseringsvinsten. Felaktigt konfigurerad cache kan också göra att du renderar om mer på servern än nödvändigt, vilket äter upp fördelen i onödan.
Tre frågor avgör oftast var en komponent ska höra hemma:
- Behöver komponenten lyssna på klick, tangenttryck eller annan omedelbar interaktion?
- Kräver den webbläsar-API:er som
window,localStorageeller geolokalisering? - Måste den hålla lokal state som ändras utan sidladdning?
Svarar du ja på någon av dem hör komponenten hemma på klienten, annars vinner du på att låta den stanna på servern.
Hur Hivecreatives använder RSC i kundprojekt
I uppdrag där innehållet är tungt, som informationssajter, content-drivna produktsidor och headless e-handelslösningar, väljer man ofta att använda Server Components som utgångspunkt snarare än undantag. Mönstret passar särskilt bra för projekt byggt på React i e-handelssammanhang, där sidvisningar med mycket produktdata annars riskerar tunga klientbundlar.
Ett återkommande fokus i granskningsarbetet är att hålla 'use client'-gränserna så smala som möjligt: interaktiva komponenter isoleras i egna filer, medan resten av sidträdet, till exempel produktbeskrivningar, bilder och metadata, får förbli renderat på servern. Det håller nere bundelstorleken även när sidan i övrigt är komplex.
För team som redan har en existerande React-app och överväger att flytta delar till RSC eller Next.js App Router är en teknisk genomgång ofta rätt första steg, innan man bygger om produktionskod. Har du en applikation där du misstänker att klientbunten har svällt i onödan är det värt att se över webbutvecklingstjänsterna och göra en proof-of-concept innan ett större omtag.
Var konventionell visdom missar poängen
Mycket skrivet om React Server Components fokuserar på siffror: mindre bundle, snabbare TTI, som om det var hela historien. Den verkliga skillnaden mellan projekt som lyckas och de som bara flyttar problemet till servern ligger i hur väl teamet förstår klient/server-gränsen, inte i hur många komponenter som tekniskt sett kör på servern.
Ett team som sätter 'use client' slentrianmässigt högt upp i trädet får i praktiken samma app som innan, bara med extra komplexitet på toppen. Den verkliga vinsten kommer när du designar datahämtningen från grunden med parallellism i åtanke: komponenter som kan hämta sin egen data oberoende av varandra, istället för i en kedja av väntande anrop.
Min rekommendation till utvecklare som är nya på RSC: börja inte med att fråga “vilka komponenter kan jag göra till Server Components?”. Fråga istället “var behöver jag verkligen interaktivitet?” och låt allt annat vara kvar på servern som standard. Det är en mindre fråga att ställa, men den leder till en helt annan arkitektur, och den skillnaden syns direkt i vad som faktiskt skickas till webbläsaren.
— Peter
Källor
Vanliga frågor
Vad är React Server Components?
React Server Components är komponenter som renderas enbart på servern. Deras kod skickas aldrig till klienten, vilket minskar JavaScript-bundeln och förbättrar Time to Interactive.
Vilka är huvudkomponenterna i React?
React byggs kring komponenter, som kan vara Server Components (renderas på servern) eller Client Components (renderas i webbläsaren och hanterar interaktion), tillsammans med hooks, props och state som styr hur de beter sig.
Vad är skillnaden mellan Server Components och SSR?
Traditionell SSR renderar HTML på servern men skickar sedan ändå komponentkoden till klienten för hydrering. Server Components skickar aldrig sin kod till klienten alls, bara en serialiserad RSC-payload med resultatet.
Vilka komponentbibliotek används ofta tillsammans med RSC?
Många UI-bibliotek går att kombinera med RSC, men de kräver oftast att de interaktiva delarna markeras med 'use client' eftersom de bygger på state och event-hantering som bara fungerar i klienten.
Måste jag använda Next.js för att använda Server Components?
Next.js App Router är det mest etablerade sättet att använda RSC i produktion idag, men React Server Components är en del av React-kärnan och kan i teorin stödjas av andra ramverk och bundlare som implementerar samma gränssnitt.






