تخطَّ إلى المحتوى

⚛️ شرح React

React Server Components و Next.js

الدرس 25 من 28· ⏱ 2 دقائق قراءة

React Server Components و Next.js

Server vs Client Components

في Next.js 16، كل المكوّنات هي Server Components افتراضياً. أضف "use client" فقط عندما تحتاج ميزات المتصفح.

الميزةServer ComponentClient Component
useState, useEffectغير متاحمتاح
onClick, onChangeغير متاحمتاح
localStorage, windowغير متاحمتاح
جلب البيانات (DB/API)متاح مباشرةعن طريق use() أو React Query
حجم JS المرسلصفريُضمّن في bundle العميل
الوصول للمفاتيح السريةآمنغير آمن

استخدام "use client"

"use client";

import { useState } from "react";

export function Counter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>العدد: {count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}

استخدام "use server" (Server Actions)

// app/actions.ts
"use server";

export async function createUser(formData: FormData) {
  const http = new HttpClient("/api");
  const user = await http.post("/users", {
    name: formData.get("name"),
    email: formData.get("email"),
  });
  return user;
}

جلب البيانات في Server Component

// app/users/page.tsx
import { HttpClient, UserDTO } from "./lib/react-base-repository";

// هذا المكوّن يعمل على الخادم فقط — لا يصل أبداً للعميل
async function UsersPage() {
  const http = new HttpClient("https://api.example.com");
  const users: UserDTO[] = await http.get("/users");

  return (
    <ul>
      {users.map((u) => (
        <li key={u.id}>{u.name} — {u.email}</li>
      ))}
    </ul>
  );
}

التركيب (Composition) الصحيح

 اللوحة (Server Component)
   ├── <Header />          (Server — بيانات من DB)
   ├── <Suspense>
   │     └── <Profile />  (Server — بيانات متدفقة)
   └── <Counter>           (Client — "use client")
         └── {children}    (Server Component كلوحة فرعية)

ملاحظات إصدار Next.js 16

  • params و searchParams أصبحت async — استخدم await params
  • middleware.ts أُعيدت تسميتها إلى proxy.ts
  • fetch لا يُخزَّن مؤقتاً افتراضياً — استخدم use cache أو React.cache()
  • Turbopack هو المشغّل الافتراضي
  • next/image: الصور المحلية تحتاج images.localPatterns.search
شرح React Server Components و Next.js — React بالعربي
React Server Components و Next.jsReact بالعربي · The Code Fix

📚 لمزيد من التعمّق في React، راجِع التوثيق الرسمي لـ React.

هل كان هذا الدرس مفيدًا؟