React Server Components (RSC) שינו באופן מהותי את הדרך שבה אנו בונים יישומי React. על ידי העברת לוגיקת הרנדור לשרת, אנו יכולים להקטין משמעותית את חבילת ה-JavaScript שנשלחת ללקוח. במאמר זה, נחקור דפוסים מתקדמים ושיטות עבודה מומלצות לניצול RSC ב-2026.
מה הם Server Components?
Server Components מאפשרים לנו לרנדר רכיבים אך ורק על השרת. הקוד שלהם לעולם אינו נשלח לדפדפן.
היתרונות
- גודל חבילה אפסי: תלויות המשמשות ב-Server Components נשארות על השרת.
- גישה ישירה לבקאנד: ניתן לבצע שאילתות למסד הנתונים ישירות בתוך הרכיב.
- פיצול קוד אוטומטי: רכיבי לקוח המיובאים בצד השרת מפוצלים אוטומטית.
דפוס שליפת נתונים
// 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 ל-Streaming
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> ); }
שילוב רכיבי Server ו-Client
כלל אצבע: Server Components יכולים לייבא Client Components. Client Components לא יכולים לייבא Server Components ישירות. אולם, ניתן להעביר Server Component כ-children ל-Client Component.
דפוס "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} </div> ); }
// ServerPage.tsx import ClientWrapper from './ClientWrapper'; import ServerContent from './ServerContent'; export default function Page() { return ( <ClientWrapper> <ServerContent /> </ClientWrapper> ); }
מלכודות נפוצות
- שימוש ב-Context ב-Server Components: Context הוא מושג בצד הלקוח.
- הוספת מטפלי אירועים: לא ניתן להוסיף
onClickאוonChangeל-Server Component.
סיכום
React Server Components הם לא רק פיצ'ר; הם שינוי פרדיגמה. על ידי הבנת הגבול בין שרת ללקוח, תוכלו לבנות יישומים שהם גם אינטראקטיביים מאוד וגם מהירים להפליא.