---
عن المشروع
هذا المشروع يهدف بالاساس لشرح كيفية جعل عناصر React قابلة للسحب و التحريك (Drag & Drop) عن طريق ما يسمى بـ DOM Event Model ما يعني أن هذا يتم مباشرة عن طريق HTML Drag'n Drop API دون اللجوء الى مكتبات خارجية.
الهدف
يسرني أنك قد سئلت, هناك العديد من عناصر واجهة المستخدم (UI) التي يمكن ان تتحسن عندما نضيف لها خاصية التحريك, خصوصا بالنسبة للاجهزة التي تعمل باللمس. عموما نجد هذه العناصر في البرامج التعليمية على سبيل المثال او أي حلول تعتمد بشكل كبير على تجاوب المستخدم مع الواجهة. بعض الامثلة: Trello Boards, Google Calendar, DrawMuzz
النتيجة النهائية
المشروع الذي سنقوم بصنعه:
مثال عن كيف يمكن استخدامه في مشروع حقيقي:
رابط للتجريب: https://qalamar.github.io/react-dnd-showcase
شرح عام
متطلبات
للقيام بتشغيل وصنع المثال, نحتاج أولا الى تنفيذ بعض الاوامر:
اذا كنت تستعمل Yarn
تعليمات
لنتوجه الى ملف App.js
تخزين المعلومات :
لنقم بانشاء جدول يضم معلومات حول العناصر, هذه المعلومات تتظمن: معرف id
, محتوى العنصر item
والخانة الخاصة به type
.
لا تنسى اضافة تعريف useState
في بداية الملف:
معالجة التحريك (Event handlers) :
حينما نضغط على العنصر عند بداية التحريك (onDragStart), نقوم بتهيئة معلومات العنصر للنقل عن طريق dataTransfer.setData
نمنع المعالجة الافتراضية لأننا نريد تطبيق معالجة خاصة (مقارنة الخانات) عند نهاية التحريك (onDragOver)
عند وضع العنصر داخل الاطار, نقوم بتحويل المعلومات المعدة سابقا في dataTransfer.getData
ونقوم بالتأكد بأن العنصر في الاطار المناسب. بعدها نقوم بتحديث الـstate بالحالة الجديدة
عند حدوث تحريك, نقوم بتحديث جداول الخانات في حالة اضافة عنصر جديد
note
لا تنسى ان تضيف "dir="rtl الى عناصرك اذا كنت تستخدم اللغة العربية
في واجهة المستخدم, نقوم بصنع خانتين. كل منهما تعرض العناصر المطابقة لنوعها من جدول العناصر
الملف النهائي :
حينما تنتهي من اتباع ما سبق, يصبح لديك الملف التالي:
تنسيق
لجعل المشروع في صيغة قابلة للعرض, سنقوم باضافة TailwindCSS
مما يمكننا من تعديل الواجهة بسهولة
tip
هذه الخطوة اختيارية ويمكنك استعمال CSS فقط أو اي مكتبة تفضل كـBootstrap, Material UI
التعليمات : نفذ الاوامر التالية
اصنع ملف src/tailwind.css
وضع بداخله المعلومات التالية:
الان توجه الى ملف package.json
وعدل الـscripts كما يلي:
عد الى الملف الرئيسي وطبق التنسيق التالي:
هذا التنسيق يسمح لنا بالحصول على الواجهة التالية
الان بامكانك تشغيل المشروع
ماذا بعد؟
اذا كنت تريد أن تطور حلول اكثر تعقيدا او أن تظيف Animations دون أن تصنع كل شيء يديويا, انصحك بالاضافات مفتوحة المصدر التالية:
سبب اختياري لهذه الاضافات هو لكونها مشهورة نسبيا وتحظى بدعم مستمر من المطورين. أود أيضا أن اذكر بعض المكتبات مثل Framer Motion التي تحتوي على خصائص مشابهة
كلمة أخيرة
شكرا على القراءة حتى هذه النقطة, أتمنى ان يكون الشرح مفيدا وحظا سعيدا في مشاريعكم المقبلة.