0Pricing
React Academy · درس

Clipboard API: النسخ واللصق في React

نفّذ أزرار النسخ إلى الحافظة باستخدام Clipboard API الحديثة، وقدّم بديلًا مناسبًا للمتصفحات الأقدم

Clipboard API: النسخ واللصق في React درس مجاني في React Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

الكتابة إلى الحافظة

تكتب navigator.clipboard.writeText(text) سلسلة نصية في حافظة النظام وتعيد Promise. وهي البديل الحديث لنهج execCommand القديم. استخدم await دائمًا مع Promise وتعامل مع احتمال رفضها، مثلما يحدث عندما يرفض المستخدم الوصول إلى الحافظة.

القراءة من الحافظة

تقرأ navigator.clipboard.readText() محتوى الحافظة الحالي كسلسلة نصية، وتعيد Promise أيضًا. تتطلب القراءة إذن clipboard-read، ويطلب المتصفح من المستخدم منحه. عمليًا، تُستخدم قراءة الحافظة بوتيرة أقل من الكتابة إليها في تطبيقات React المعتادة.

تتطلب الكتابة إلى الحافظة إيماءة من المستخدم

تفرض المتصفحات ألا يُستدعى clipboard.writeText إلا داخل معالج لإيماءة من المستخدم، مثل حدث النقر أو keydown. وسيؤدي استدعاؤه داخل useEffect أو بشكل غير متزامن بعد الإيماءة إلى طرح خطأ أمني. شغّل الكتابة دائمًا مباشرةً من معالج onClick.

نمط واجهة النسخ إلى الحافظة

النمط المعتاد هو: ينقر المستخدم زر النسخ، ويستدعي المعالج لديك navigator.clipboard.writeText(value)، وعند النجاح تعيّن حالة copied إلى true، ويعرض الزر مؤقتًا علامة صح أو التسمية "تم النسخ!". بعد فترة قصيرة يعود الزر إلى حالته العادية.

إنشاء خطاف useCopyToClipboard

غلّف المنطق في خطاف باسم useCopyToClipboard يعيد صفيفًا: [copied, copyFn]. تقود القيمة المنطقية copied ملاحظات واجهة المستخدم، بينما تقبل copyFn النص المراد نسخه. يتولى الخطاف عملية الكتابة غير المتزامنة وأي خطأ داخليًا، لتظل المكوّنات بسيطة.

إعادة ضبط حالة النسخ

داخل الخطاف، بعد نجاح النسخ، عيّن setCopied(true) وجدول إعادة الضبط باستخدام setTimeout(() => setCopied(false), 2000). خزّن معرّف المهلة وامسحه في تنظيف useEffect لمنع تحديثات الحالة بعد إلغاء التركيب. يتجنب هذا التحذير "cannot update state on an unmounted component".

الخيار البديل القديم باستخدام execCommand

لا تدعم المتصفحات القديمة والصفحات التي لا تستخدم HTTPS واجهة Clipboard API. ينشئ الخيار البديل القديم عنصر textarea مؤقتًا، ويعيّن قيمته، ويضيفه إلى body، ويستدعي document.execCommand('copy')، ثم يزيل العنصر. هذا النهج متزامن ويعمل في كل مكان، لكنه مهجور.

التحقق من توفر Clipboard API

قبل استخدام Clipboard API، تحقّق من: navigator.clipboard && typeof navigator.clipboard.writeText === 'function'. إذا لم تكن متوفرة، فاستخدم نهج execCommand القديم. يمنع هذا التحقق الوقائي أخطاء وقت التشغيل في البيئات التي لا تدعم الواجهة.

إذن قراءة الحافظة

تتطلب قراءة الحافظة إذن المستخدم عبر Permissions API. يمكنك الاستعلام عن الحالة الحالية: navigator.permissions.query({ name: 'clipboard-read' }) يعيد PermissionStatus بحالة granted أو denied أو prompt. سيطلب المتصفح الإذن تلقائيًا عند استدعاء readText().

متطلب HTTPS

لا تتوفر Clipboard API إلا في السياقات الآمنة، مثل HTTPS أو localhost. في صفحات HTTP تكون navigator.clipboard مساوية لـ undefined. هذا قيد أمني لأن محتوى الحافظة قد يكون حساسًا. تحقّق دائمًا من توفر الواجهة قبل الرجوع إلى أساليبها لتجنب أخطاء المرجع الفارغ.

اختبار الحافظة في jsdom

لا يطبّق jsdom (الذي يستخدمه Jest) Clipboard API. أنشئ له محاكاة في إعداد الاختبارات: Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined) } }). يتيح لك ذلك اختبار أن المكوّن يستدعي writeText بالوسيط الصحيح دون الحاجة إلى بيئة متصفح حقيقية.

متطلبات الكتابة إلى الحافظة

متى يمكن استدعاء navigator.clipboard.writeText() بأمان في المتصفح؟

مراجعة الدرس: Clipboard API في React

استخدم navigator.clipboard.writeText() داخل معالج النقر لنسخ النص. أنشئ hook باسم useCopyToClipboard يعيد [copied, copyFn] مع إعادة ضبط مؤقتة. تحقّق دائمًا من توفر API، ووفر بديلًا باستخدام execCommand للمتصفحات الأقدم، وأنشئ محاكاة لـ navigator.clipboard في اختبارات Jest.

الأسئلة الشائعة

هل درس «Clipboard API: النسخ واللصق في React» مجاني؟

نعم — نص درس «Clipboard API: النسخ واللصق في React» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «Clipboard API: النسخ واللصق في React»؟

نفّذ أزرار النسخ إلى الحافظة باستخدام Clipboard API الحديثة، وقدّم بديلًا مناسبًا للمتصفحات الأقدم تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «Clipboard API: النسخ واللصق في React»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Clipboard API: النسخ واللصق في React
  2. Geolocation API في مكوّنات React
  3. Notifications API ومعالجة الأذونات
  4. IntersectionObserver للتأثيرات المحفَّزة بالتمرير
← العودة إلى React Academy