spinny:~/writing $ less mastering-react-server-components.md
12لقد غيرت مكونات خادم React (RSC) بشكل جذري كيفية بناء تطبيقات React. من خلال نقل منطق العرض إلى الخادم، يمكننا تقليل حزمة JavaScript المرسلة إلى العميل بشكل كبير، مما يؤدي إلى أوقات تحميل أسرع وتجارب مستخدم أفضل. في هذه المقالة، سنستكشف الأنماط المتقدمة وأفضل الممارسات للاستفادة من RSCs في عام 2026.34## ما هي مكونات الخادم؟56تقليديًا، كان يتم عرض مكونات React بالكامل على العميل (CSR) أو عرضها مسبقًا على الخادم كـ HTML (SSR) ثم تنشيطها على العميل. تسمح لنا **مكونات الخادم** بعرض المكونات _حصريًا_ على الخادم. لا يتم إرسال الكود الخاص بها أبدًا إلى المتصفح.78### الفوائد9101. **حجم حزمة صفر**: التبعيات المستخدمة في مكونات الخادم (مثل محللات markdown أو مكتبات التواريخ الثقيلة) تبقى على الخادم.112. **الوصول المباشر إلى الخلفية**: يمكنك الاستعلام عن قاعدة البيانات الخاصة بك مباشرة داخل المكون الخاص بك دون كشف نقاط نهاية 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>` لإظهار واجهة مستخدم احتياطية على الفور أثناء تحميل البيانات.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## التداخل بين مكونات الخادم والعميل6061واحدة من أكثر الجوانب إرباكًا هي كيفية الجمع بين مكونات الخادم والعميل.6263**قاعدة عامة**: يمكن لمكونات الخادم استيراد مكونات العميل. لا يمكن لمكونات العميل استيراد مكونات الخادم مباشرة. ومع ذلك، يمكنك تمرير مكون خادم كـ `children` إلى مكون عميل.6465### نمط "الأطفال" (Children Pattern)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} {/* يمكن أن يكون هذا مكون خادم! */}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) في مكونات الخادم**: السياق هو مفهوم من جانب العميل. إذا كنت بحاجة إلى مشاركة البيانات من جانب الخادم، فمررها كـ props أو استخدم ذاكرة التخزين المؤقت المخصصة لنطاق الطلب.1022. **إضافة معالجات الأحداث**: لا يمكنك إضافة `onClick` أو `onChange` إلى مكون خادم. ينتمي هذا المنطق إلى عقدة ورقة مكون عميل عامة.103104## الخاتمة105106مكونات خادم React ليست مجرد ميزة؛ إنها تحول نموذجي. من خلال فهم الحدود بين الخادم والعميل، يمكنك بناء تطبيقات تفاعلية للغاية وسريعة بشكل لا يصدق.107
:إتقان مكونات خادم React (React Server Components) في عام 2026lines 1-107 (END) — press q to close