الفرز والتصفية والترقيم
فعّل فرز الأعمدة والتصفية العامة وتصفية الأعمدة والترقيم من جهة العميل باستخدام ميزات TanStack Table
الفرز والتصفية والترقيم درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
تفعيل الفرز
لإضافة الفرز، استورد getSortedRowModel وأضِفه إلى إعدادات useReactTable. تحتاج أيضًا إلى حالة فرز (وهي مصفوفة من كائنات {id, desc}) ومعالج onSortingChange موصول بحالة React.
يغلّف نموذج الصفوف المرتبة نموذج الصفوف الأساسي، ويعيد ترتيب الصفوف استنادًا إلى حالة الفرز الحالية.
تبديل الفرز في رأس العمود
يوفّر كل رأس عمود الدالة column.getToggleSortingHandler()، التي توصلها بالخاصية onClick لعنصر th. يؤدي النقر إلى التبديل بالتتابع بين الحالات التصاعدية والتنازلية وبدون فرز.
تعيد الدالة column.getIsSorted() القيمة 'asc' أو 'desc' أو false، مما يتيح لك عرض سهم مؤشر الفرز المناسب.
الفرز حسب عدة أعمدة
يدعم TanStack Table الفرز حسب عدة أعمدة في الوقت نفسه. يضغط المستخدمون على مفتاح Shift أثناء النقر على رأس عمود ثانٍ لإضافته إلى مصفوفة الفرز من دون إزالة العمود الأول.
تحتوي المصفوفة sortingState على جميع أعمدة الفرز النشطة مرتبة حسب الأولوية، ويطبّق نموذج الصفوف المرتبة هذه الأعمدة بالتتابع.
التصفية العامة
فعّل التصفية العامة باستيراد getFilteredRowModel وإضافة حالة globalFilter ومعالج onGlobalFilterChange. صِل عنصر إدخال بالحالة لتصفية جميع الأعمدة دفعة واحدة.
تستخدم التصفية العامة استراتيجية المطابقة التقريبية أو includes افتراضيًا، ويمكن ضبطها من خلال filterFns.
التصفية على مستوى العمود
يمكن للأعمدة الفردية إتاحة عوامل التصفية الخاصة بها من خلال column.getFilterValue() و column.setFilterValue(). أضِف حقل إدخال للتصفية أسفل كل رأس عمود، وصِله بهذه الدوال.
تتراكم عوامل تصفية الأعمدة وعوامل التصفية العامة؛ لذلك يجب أن تجتاز الصفوف جميع عوامل التصفية النشطة حتى تظهر في نموذج الصفوف المصفاة.
تفعيل التقسيم إلى صفحات
استورد getPaginationRowModel وأضِفه إلى إعدادات useReactTable، إلى جانب كائن حالة للتقسيم إلى صفحات (يحتوي على pageIndex و pageSize) ومعالج onPaginationChange.
يقتطع نموذج الصفوف المقسمة إلى صفحات الصفوف المصفاة (والمرتبة) لعرض الجزء الخاص بالصفحة الحالية فقط.
التنقل بين الصفحات
يوفّر مثيل الجدول الدوال table.nextPage() و table.previousPage() و table.firstPage() و table.lastPage() للتنقل. استخدم table.getCanNextPage() و table.getCanPreviousPage() لتعطيل الأزرار عند بلوغ الحدود.
تنقلك table.setPageIndex(n) مباشرةً إلى صفحة محددة، بينما تغيّر table.setPageSize(n) عدد الصفوف الظاهرة في الصفحة.
معلومات التقسيم إلى صفحات
تعيد table.getPageCount() العدد الإجمالي للصفحات بناءً على قسمة عدد الصفوف المصفاة على pageSize. وتمنحك table.getState().pagination.pageIndex فهرس الصفحة الحالية الذي يبدأ من الصفر.
استخدم هذه القيم لإنشاء عدّاد للصفحات مثل "الصفحة 3 من 12" في واجهة التقسيم إلى صفحات.
دمج نماذج الصفوف
تتألف نماذج الصفوف من بعضها: يوفّر getCoreRowModel الأساس، ويغلّفه getFilteredRowModel لتطبيق عوامل التصفية، ثم يغلّف getSortedRowModel البيانات المصفاة لتطبيق الفرز، ويقتطع getPaginationRowModel النتيجة للصفحة الحالية.
الترتيب مهم: يحدث الفرز بعد التصفية، ويحدث التقسيم إلى صفحات أخيرًا.
اعتبارات الأداء
يخزّن TanStack Table نتائج حساب نماذج الصفوف مؤقتًا داخليًا. ويكون فرز مجموعات البيانات الكبيرة وتصفيتها فعالًا، إذ لا يُعاد حساب سوى نماذج الصفوف التي تغيّرت.
بالنسبة إلى مجموعات البيانات الكبيرة جدًا (100,000+ صف)، ادمج التقسيم إلى صفحات مع العرض الافتراضي (react-virtual) لتجنب عرض جميع صفوف الصفحة دفعة واحدة.
ملخص الفرز والتصفية والتقسيم إلى صفحات
صِل getSortedRowModel بحالة الفرز، وgetFilteredRowModel بحالة globalFilter وحالات تصفية الأعمدة، وgetPaginationRowModel بحالة التقسيم إلى صفحات. كل ميزة اختيارية ويمكن دمجها بسلاسة مع الميزات الأخرى.
تتحكم رؤوس الأعمدة في الفرز من خلال getToggleSortingHandler، وتتحكم حقول الإدخال في التصفية من خلال setFilterValue و onGlobalFilterChange، بينما تتحكم الأزرار في التقسيم إلى صفحات من خلال nextPage و previousPage و setPageIndex.
حالة التقسيم إلى صفحات في TanStack Table
ما الكائن الذي يحتفظ بفهرس الصفحة الحالية وحجمها في حالة التقسيم إلى صفحات في TanStack Table؟
مراجعة الدرس
يتطلب الفرز getSortedRowModel وحالة فرز ومعالجات للنقر على رؤوس الأعمدة. وتستخدم التصفية getFilteredRowModel مع حالة تصفية عامة وحالات تصفية لكل عمود. أما التقسيم إلى صفحات فيستخدم getPaginationRowModel مع حالة pageIndex و pageSize.
تتألف نماذج الصفوف الثلاثة تلقائيًا: التصفية أولًا، ثم الفرز، ثم التقسيم إلى صفحات أخيرًا.
الأسئلة الشائعة
هل درس «الفرز والتصفية والترقيم» مجاني؟
نعم — نص درس «الفرز والتصفية والترقيم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفرز والتصفية والترقيم»؟
فعّل فرز الأعمدة والتصفية العامة وتصفية الأعمدة والترقيم من جهة العميل باستخدام ميزات TanStack Table تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الفرز والتصفية والترقيم»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فلسفة TanStack Table والتصميم بلا واجهة
- تعريف الأعمدة وعرض الصفوف
- الفرز والتصفية والترقيم
- تحديد الصفوف والجداول الافتراضية