'use client'This feature is available in the latest Canary

Canary

هذه التوجيهات لازمة فقط إذا كنت تستخدم RSC (مكونات الخادم) أو تبني مكتبة متوافقة معها.

'use client' تميز الملفات ليتم تنفيذ مكوناتها في جانب العميل


المرجع

'use client'

أضف 'use client' في أعلى ملف لتمييزه (الملف أو أي مكونات فرعية يحتويها) بأنه يتم تنفيذه عند العميل، بغض النظر عن المكان الذي يتم استيراده منه.

'use client';

import { useState } from 'react';

export default function RichTextEditor(props) {
// ...

عند استيراد ملف معلّم بعبارة 'use client' من مكوّن في الخادم، ستعامل المجمّعات المتوافقة bundlers الاستيراد كـ”نقطة الفصل” بين كود الخادم وكود العميل. يمكن للمكونات الموجودة في هذه النقطة أو أسفلها في الرسم البياني للوحدة الأساسية استخدام الميزات React المخصصة للعميل مثل useState.

ملاحظات

  • ليس من الضرورة إضافة 'use client' إلى كل ملف يستخدم ميزات React المخصصة للعميل، بل فقط في الملفات التي يتم استيرادها من ملفات عناصر الخادم. 'use client' تُشير إلى الحدود بين الكود المخصص للخادم والعميل؛ أي مكونات تكون أسفل هذه الحدود في شجرة العناصر ستُنفَذ تلقائيًا على العميل. لكي يتم تقديمها من عناصر الخادم، يجب أن تحتوي المكونات المصدرة من ملفات 'use client' على خصائص يمكن تسلسلها.

  • عند استيراد ملف 'use client' من ملف خادم، يمكن تقديم القيم المستوردة كمكون React أو تمريرها عبر الـ props إلى مكون عميل. وأي استخدام آخر سيثير خطأ.

  • عند استيراد ملف ‘use client’ من ملف عميل آخر، فإن التوجيه لا يؤثر. هذا يسمح لك بكتابة مكونات خاصة بالعميل يمكن استخدامها في نفس الوقت من عناصر الخادم والعميل.

  • ستصبح جميع الأكواد في ملف 'use client' وأي وحدات يتم استيرادها (مباشرة أو غير مباشرة) جزءًا من شبكة الوحدات الأساسية للعميل ويجب إرسالها وتنفيذها من قِبل العميل ليتم تقديمها من قبل المستعرض. لتقليل حجم حزمة العميل والاستفادة الكاملة من الخادم، قم بنقل الحالة (والتوجيهات 'use client') للأسفل في شجرة العناصر عند الحاجة، وقم بتمرير عناصر الخادم المقدمة كأطفال (children) إلى عناصر العميل.

  • نظرًا لأن الخصائص يتم تسلسلها عبر الحدود بين الخادم والعميل، يجب مراعاة أن موقع هذه التوجيهات يمكن أن يؤثر على كمية البيانات المرسلة إلى العميل؛ يُنصح بتجنب هياكل البيانات التي تكون أكبر من اللازم.

  • عادةً، يجب ألا يتم وضع 'use client' على المكونات مثل <MarkdownRenderer> التي لا تستخدم ميزات خاصة بالخادم أو العميل. بهذه الطريقة، يمكنها التقديم حصريًا على الخادم عند استخدامها من عنصر خادم، ولكن ستُضاف إلى حزمة العميل عند استخدامها من عنصر عميل.

  • يجب أن تشمل المكتبات التي يتم نشرها على npm 'use client' على المكونات المصدرة من React التي يمكن تقديمها باستخدام خصائص يمكن تسلسلها وتستخدم ميزات React المخصصة للعميل، للسماح بالاستيراد والتقديم من قِبل عناصر الخادم. وإلا، سيحتاج المستخدمون إلى لف مكونات المكتبة في أكوادهم الخاصة بـ 'use client' وهذا قد يكون مرهقًا ويمنع المكتبة من نقل الخطط إلى الخادم لاحقًا. عند نشر الملفات المجمَّعة مُسبقًا على npm، تأكد من أن المكونات المصدرة مبدوءة بـ 'use client'، منفصلة عن أي ملف يحتوي على تصديرات يمكن استخدامها مباشرة على الخادم.

  • ستستمر مكونات العميل في العمل كجزء من عملية تقديم جانب الخادم (SSR) أو إنشاء الموقع الثابت في وقت التجميع (SSG)، حيث يعملون كعملاء لتحويل الإخراج الأولي لمكونات React إلى HTML يمكن تقديمه قبل تنزيل حزم JavaScript. ولكنها لا يمكنها استخدام ميزات خاصة بالخادم مثل القراءة مباشرةً من قاعدة بيانات.

  • يجب أن تكون التوجيهات مثل 'use client' في بداية الملف، قبل أي استيرادات أو أكواد أخرى (يمكن وضع تعليقات فوق التوجيهات). يجب كتابة التوجيهات باستخدام علامات اقتباس فردية أو مزدوجة، وليس علامات backtick. (تنسيق التوجيه 'use xyz' يشبه إلى حد ما تنسيق اسماء الـ Hooks مثل useXyz()، ولكن هذا التشابه مجرد صدفة.)

الاستخدام

Under Construction

هذا القسم لم يكتمل بعد.

يمكن استخدام هذا النهج في أي إطار عمل يدعم مكونات الخادم. يمكنك العثور على مظيد من المعلومات منهم: