جاري التحميل...
جاري التحميل...
فهم الفرق بين مكونات الخادم والعميل في Next.js
مكونات الخادم هي مكونات React تعمل فقط على الخادم. لا تنقل JavaScript أبداً إلى العميل، مما يجعل تطبيقك أسرع وأخف.
💡 تشبيه بسيط:
مكون الخادم مثل المطبخ — يُحضّر الطعام (يجلب البيانات) بعيداً عن العميل. مكون العميل مثل طاولة التقديم — يعرض الطعام (الواجهة) للمستخدم ويتفاعل معه. لا تريد إرسال المطبخ بأكمله للعميل!
في Next.js 13+، جميع المكونات في مجلد app/ هي مكونات خادم افتراضياً.
يمكن لمكونات الخادم الوصول مباشرة إلى قواعد البيانات وأنظمة الملفات والموارد الخادم الأخرى.
💡 الفرق الجوهري:
إذا كان المكون يحتاج إلى useState أو useEffect أو معالجات أحداث، فيجب أن يكون مكون عميل.
أضف التوجيه "use client" في أعلى الملف لجعله مكون عميل.
💡 مهم:
استورد مكونات العميل فقط في مكونات العميل الأخرى، وليس العكس.
ماذا يحدث لـ JavaScript مكونات الخادم على العميل؟
متى تستخدم مكون العميل؟
كيف تجعل المكون مكون عميل؟
ما هي الفائدة الرئيسية لمكونات الخادم؟
أنشئ مكون خادم يجلب ويعرض البيانات دون نقل JavaScript إلى العميل.
الحل:
// Server Component
async function ProductList() {
const products = await db.products.findMany();
return (
<ul>
{products.map(p => (
<li key={p.id}>{p.name}</li>
))}
</ul>
);
}
// Client Component
"use client";
function AddToCartButton({ productId }) {
const [isAdding, setIsAdding] = useState(false);
return (
<button onClick={() => setIsAdding(true)}>
{isAdding ? "جاري الإضافة..." : "أضف إلى السلة"}
</button>
);
}مكون الخادم:
مكون العميل:
متى تستخدم مكون الخادم؟
الإجابة:
لجلب البيانات والوصول المباشر لقاعدة البيانات والاحتفاظ بالبيانات الحساسة على الخادم.
كيف تجعل المكون مكون عميل؟
الإجابة:
أضف التوجيه 'use client' في أعلى الملف.
ما الفائدة الرئيسية لمكونات الخادم؟
الإجابة:
تقليل حزمة JavaScript المُرسلة إلى العميل، مما يجعل التطبيق أسرع.
لا تضع 'use client' في كل مكان
الافتراض هو مكون الخادم. أضف 'use client' فقط لل components التي تحتاج تفاعل.