spinny:~/writing $ less mastering-react-server-components.md
12React Server Components (RSC) نحوه ساخت برنامههای React را به طور اساسی تغییر دادهاند. با انتقال منطق رندرینگ به سرور، میتوانیم باندل JavaScript ارسالی به کلاینت را به طور قابل توجهی کاهش دهیم که منجر به زمان بارگذاری سریعتر و تجربههای کاربری بهتر میشود. در این مقاله، الگوهای پیشرفته و بهترین شیوهها برای استفاده از RSC در سال ۲۰۲۶ را بررسی میکنیم.34## Server Components چیست؟56به طور سنتی، کامپوننتهای React کاملاً در کلاینت (CSR) رندر میشدند یا به صورت HTML در سرور پیشرندر (SSR) شده و سپس در کلاینت هیدراته میشدند. **Server Components** به ما امکان میدهند کامپوننتها را _منحصراً_ در سرور رندر کنیم. کد آنها هرگز به مرورگر ارسال نمیشود.78### مزایا9101. **اندازه باندل صفر**: وابستگیهایی که در Server Components استفاده میشوند (مانند پارسرهای مارکداون یا کتابخانههای سنگین تاریخ) در سرور باقی میمانند.112. **دسترسی مستقیم به بکاند**: میتوانید مستقیماً از داخل کامپوننت خود به پایگاه داده کوئری بزنید بدون اینکه endpointهای API را فاش کنید.123. **تقسیم کد خودکار**: کامپوننتهای کلاینت که در سمت سرور وارد میشوند به طور خودکار به باندلهای جداگانه تقسیم میشوند.1314## الگوی واکشی داده1516با RSC، میتوانید کامپوننتهای خود را `async` کرده و مستقیماً منتظر داده بمانید.1718```tsx19// app/users/page.tsx20import { db } from '@/lib/db';2122export default async function UsersPage() {23 const users = await db.user.findMany();2425 return (26 <main>27 <h1>کاربران</h1>28 <ul>29 {users.map((user) => (30 <li key={user.id}>{user.name}</li>31 ))}32 </ul>33 </main>34 );35}36```3738### Suspense برای استریمینگ3940از آنجایی که واکشی داده میتواند کند باشد، کامپوننتهای خود را در `<Suspense>` بپیچید تا بلافاصله یک UI جایگزین نشان داده شود در حالی که داده بارگذاری میشود.4142```tsx43import { Suspense } from 'react';44import UserList from './UserList';45import LoadingSkeleton from './LoadingSkeleton';4647export default function Page() {48 return (49 <section>50 <h1>کاربران من</h1>51 <Suspense fallback={<LoadingSkeleton />}>52 <UserList />53 </Suspense>54 </section>55 );56}57```5859## ترکیب Server و Client Components6061یکی از گیجکنندهترین جنبهها نحوه ترکیب کامپوننتهای Server و Client است.6263**قاعده کلی**: Server Components میتوانند Client Components را وارد کنند. Client Components _نمیتوانند_ Server Components را مستقیماً وارد کنند. با این حال، میتوانید یک Server Component را به عنوان `children` به یک Client Component ارسال کنید.6465### الگوی "Children"6667```tsx68// ClientComponent.tsx69'use client';7071import { useState } from 'react';7273export default function ClientWrapper({ children }) {74 const [count, setCount] = useState(0);7576 return (77 <div onClick={() => setCount((c) => c + 1)}>78 شمارش: {count}79 {children} {/* این میتواند یک Server Component باشد! */}80 </div>81 );82}83```8485```tsx86// ServerPage.tsx87import ClientWrapper from './ClientWrapper';88import ServerContent from './ServerContent';8990export default function Page() {91 return (92 <ClientWrapper>93 <ServerContent /> {/* این کاملاً کار میکند */}94 </ClientWrapper>95 );96}97```9899## دامهای رایج1001011. **استفاده از Context در Server Components**: Context یک مفهوم سمت کلاینت است. اگر نیاز به اشتراکگذاری داده در سمت سرور دارید، آن را به عنوان props ارسال کنید یا از یک کش محدوده درخواست تخصصی استفاده کنید.1022. **افزودن event handlers**: نمیتوانید `onClick` یا `onChange` را به یک Server Component اضافه کنید. آن منطق به یک گره برگ Client Component عمومی تعلق دارد.103104## نتیجهگیری105106React Server Components فقط یک ویژگی نیستند؛ آنها یک تغییر پارادایم هستند. با درک مرز بین سرور و کلاینت، میتوانید برنامههایی بسازید که هم بسیار تعاملی و هم فوقالعاده سریع هستند.107
:تسلط بر React Server Components در سال ۲۰۲۶lines 1-107 (END) — press q to close