React Server Components (RSC) au schimbat fundamental modul in care construim aplicatii React. Prin mutarea logicii de randare pe server, putem reduce semnificativ pachetul JavaScript trimis clientului, ducand la timpi de incarcare mai rapizi si experiente mai bune pentru utilizatori. In acest articol, vom explora modele avansate si bune practici pentru utilizarea RSC in 2026.
Ce sunt Server Components?
Traditional, componentele React erau randate in intregime pe client (CSR) sau pre-randate pe server ca HTML (SSR) si apoi hidratate pe client. Server Components ne permit sa randam componente exclusiv pe server. Codul lor nu este niciodata trimis browserului.
Beneficiile
- Dimensiune zero a pachetului: Dependentele folosite in Server Components (precum parsere markdown sau biblioteci grele de date) raman pe server.
- Acces direct la backend: Poti interoga baza de date direct in interiorul componentei fara a expune endpoint-uri API.
- Impartire automata a codului: Componentele client importate server-side sunt automat impartite in cod.
Model de preluare a datelor
Cu RSC, poti face componentele async si astepta datele direct.
// app/users/page.tsx import { db } from '@/lib/db'; export default async function UsersPage() { const users = await db.user.findMany(); return ( <main> <h1>Users</h1> <ul> {users.map((user) => ( <li key={user.id}>{user.name}</li> ))} </ul> </main> ); }
Suspense pentru streaming
Deoarece preluarea datelor poate fi lenta, inconjura componentele cu <Suspense> pentru a arata imediat o interfata de fallback.
import { Suspense } from 'react'; import UserList from './UserList'; import LoadingSkeleton from './LoadingSkeleton'; export default function Page() { return ( <section> <h1>My Users</h1> <Suspense fallback={<LoadingSkeleton />}> <UserList /> </Suspense> </section> ); }
Intercalarea componentelor Server si Client
Regula de baza: Server Components pot importa Client Components. Client Components nu pot importa Server Components direct. Totusi, poti pasa un Server Component ca children unui Client Component.
Modelul "Children"
// ClientComponent.tsx 'use client'; import { useState } from 'react'; export default function ClientWrapper({ children }) { const [count, setCount] = useState(0); return ( <div onClick={() => setCount((c) => c + 1)}> Count: {count} {children} {/* Acesta poate fi un Server Component! */} </div> ); }
// ServerPage.tsx import ClientWrapper from './ClientWrapper'; import ServerContent from './ServerContent'; export default function Page() { return ( <ClientWrapper> <ServerContent /> {/* Functioneaza perfect */} </ClientWrapper> ); }
Capcane frecvente
- Folosirea Context in Server Components: Context este un concept client-side. Daca trebuie sa imparti date server-side, paseaza-le ca props.
- Adaugarea de event handlers: Nu poti adauga
onClicksauonChangeunui Server Component. Aceasta logica apartine unui Client Component.
Concluzie
React Server Components nu sunt doar o functionalitate; sunt o schimbare de paradigma. Intelegand granita intre server si client, poti construi aplicatii care sunt atat extrem de interactive cat si incredibil de rapide.