0Pricing
React Academy · درس

SortableContext للقوائم القابلة لإعادة الترتيب

استخدم SortableContext وuseSortable لبناء قوائم قابلة لإعادة الترتيب مع تحريكات سلسة

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

وظيفة SortableContext

يُعد SortableContext مكوّنًا متخصصًا من dnd-kit يغلّف قائمة قابلة لإعادة الترتيب. وبينما يتولى useDraggable وuseDroppable التعامل مع السحب والإفلات العام، يتعامل SortableContext تحديدًا مع حالة الحاجة إلى إعادة ترتيب عناصر القائمة بسحبها إلى موضع جديد.

خاصية items

يتطلب SortableContext خاصية items: وهي مصفوفة من معرّفات فريدة نصية أو رقمية تطابق المعرّفات المستخدمة في المكوّنات القابلة للترتيب التابعة. يحدد ترتيب هذه المصفوفة الترتيب الحالي للعناصر. عند تحديث هذه المصفوفة في الحالة، تُعاد كتابة القائمة بالترتيب الجديد.

استراتيجيات الترتيب

يقبل SortableContext خاصية strategy التي تتحكم في طريقة ترتيب العناصر. تُستخدم verticalListSortingStrategy للقوائم الرأسية وتحسب موضع الإدراج استنادًا إلى الموضع الرأسي. وتُستخدم horizontalListSortingStrategy للقوائم الأفقية. أما rectSortingStrategy فتُستخدم للشبكات. اختر الاستراتيجية التي تتوافق مع تخطيطك.

خطاف useSortable

داخل SortableContext، يستخدم كل عنصر في القائمة خطاف useSortable({ id }) بدلًا من useDraggable. ويُعد useSortable امتدادًا شاملًا لـ useDraggable؛ إذ يعيد السمات والمستمعات وsetNodeRef وtransform نفسها، بالإضافة إلى قيم أخرى خاصة بالترتيب مثل isDragging وoverIndex.

isDragging للحالة المرئية

تكون قيمة isDragging من useSortable مساوية لـ true أثناء سحب العنصر فعليًا. وعادةً ما تستخدمها لتقليل الشفافية أو لإضافة نمط عنصر نائب إلى العنصر الأصلي في القائمة أثناء سحبه. وتوضح هذه الفجوة المرئية للمستخدم موضع العنصر الحالي في القائمة.

الأداة المساعدة arrayMove

يصدّر dnd-kit أداة مساعدة باسم arrayMove(array, fromIndex, toIndex) من @dnd-kit/sortable. وتعيد مصفوفة جديدة نُقل فيها العنصر الموجود في fromIndex إلى toIndex. وهذه هي الطريقة القياسية لتحديث مصفوفة الحالة عند اكتمال السحب لإعادة الترتيب.

تنفيذ onDragEnd للترتيب

في رد نداء onDragEnd داخل DndContext لقائمة قابلة لإعادة الترتيب، اعثر على الفهرسين القديم والجديد باستخدام items.indexOf(event.active.id) وitems.indexOf(event.over?.id). إذا كان كلا الفهرسين صالحًا ومختلفًا، فاستدعِ setItems(arrayMove(items, oldIndex, newIndex)) لإعادة ترتيب المصفوفة.

تحريك العناصر المزاحة بسلاسة

عند سحب عنصر، تتحرك العناصر الأخرى في القائمة إلى مواضع جديدة لتوضيح المكان الذي سيستقر فيه العنصر المسحوب. يوفر useSortable تحويل CSS لكل عنصر غير مسحوب، فيزيحه جانبًا لإفساح المجال. وتؤدي إضافة انتقال CSS إلى هذا التحويل إلى إنشاء حركة سلسة.

انتقال للحركة السلسة

طبّق انتقال CSS على خاصية transform لعناصر القائمة القابلة للترتيب: transition: isDragging ? undefined : transform ? 'transform 200ms ease' : undefined. أثناء سحب العنصر، لا حاجة إلى انتقال، إذ ينبغي أن يتتبع المؤشر مباشرةً. وعند إزاحته، ينشئ الانتقال حركة انزلاق سلسة.

الدمج مع DragOverlay

للحصول على أفضل تجربة استخدام، ادمج SortableContext مع DragOverlay. يصبح العنصر المسحوب في القائمة عنصرًا نائبًا شبه شفاف باستخدام isDragging، بينما يعرض DragOverlay نسخة صلبة ومرتفعة تتبع المؤشر. ويتجنب هذا الأسلوب الاضطرابات المرئية التي قد يقفز فيها العنصر المسحوب بين المواضع.

القوائم الرأسية والأفقية

يعمل SortableContext بالكفاءة نفسها مع القوائم الرأسية، مثل لوحات المهام وقوائم المهام، والقوائم الأفقية، مثل أشرطة التبويبات ودوارات الصور. بدّل بين الاستراتيجيات بتغيير الخاصية strategy. ويمكنك استخدامه أيضًا مع تخطيط شبكي باستخدام rectSortingStrategy، التي تحسب أقرب خلية في الشبكة استنادًا إلى موضع السحب.

arrayMove في onDragEnd

ما الوسيطات التي تأخذها arrayMove عند استدعائها داخل onDragEnd لإعادة ترتيب قائمة قابلة للترتيب؟

مراجعة الدرس: SortableContext

يغلّف SortableContext قائمة قابلة لإعادة الترتيب، ويتطلب مصفوفة items تحتوي على معرّفات فريدة واستراتيجية، رأسية أو أفقية أو شبكية. يستخدم كل عنصر useSortable بدلًا من useDraggable، ويحصل بذلك على isDragging وoverIndex. وفي onDragEnd، تعيد arrayMove(items, oldIndex, newIndex) ترتيب المصفوفة. وتحرّك انتقالات CSS على transform العناصر المزاحة بسلاسة.

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

هل درس «SortableContext للقوائم القابلة لإعادة الترتيب» مجاني؟

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

ماذا ستتعلم في «SortableContext للقوائم القابلة لإعادة الترتيب»؟

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

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

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

كم من الوقت يستغرق درس «SortableContext للقوائم القابلة لإعادة الترتيب»؟

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

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

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

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

  1. بنية dnd-kit والتصميم الذي يقدّم إتاحة الوصول أولًا
  2. DndContext وuseDraggable وuseDroppable
  3. SortableContext للقوائم القابلة لإعادة الترتيب
  4. طبقات السحب المخصصة والسحب والإفلات متعدد الحاويات
← العودة إلى React Academy