العودة للدورة|مقابلات مهندس الواجهات الأمامية: إتقان React وتصميم الأنظمة وأداء الويب
معمل

بناء جدول بيانات قابل للبحث

25 دقيقة
متوسط
3 المحاولات المجانية

التعليمات

الهدف

ابنِ مكون React <DataTable> يتعامل مع مجموعات بيانات كبيرة بكفاءة. هذا تحدٍ شائع في مهام المقابلات المنزلية للواجهات الأمامية.

المتطلبات

1. البحث/التصفية

  • حقل نصي يُصفي الصفوف عبر جميع الأعمدة
  • إدخال مؤجل (300 مللي ثانية) لتجنب التصفية عند كل ضغطة مفتاح
  • عرض عدد النتائج المطابقة

2. الترتيب

  • النقر على رؤوس الأعمدة للترتيب تصاعديًا/تنازليًا
  • مؤشر مرئي لعمود الترتيب الحالي واتجاهه
  • دعم ترتيب السلاسل النصية والأرقام بشكل صحيح

3. ترقيم الصفحات

  • عرض 20 صفًا لكل صفحة
  • تنقل السابق/التالي
  • عرض رقم الصفحة الحالية وإجمالي الصفحات
  • إعادة التعيين للصفحة 1 عند تغيير استعلام البحث

4. الأداء

  • يجب التعامل مع 10,000+ صف بدون تأخر ملحوظ
  • البحث والترتيب يجب أن يشعرا بأنهما فوريان (< 100 مللي ثانية)
  • تقليل إعادة العروض غير الضرورية

5. التنقل بلوحة المفاتيح

  • السهم لأعلى/لأسفل للتنقل بين الصفوف
  • Enter لتحديد صف
  • Escape لمسح البحث

مخطط البيانات

يجب أن يعمل مكونك مع شكل البيانات هذا:

interface User {
  id: number;
  name: string;
  email: string;
  role: string;
  department: string;
  salary: number;
  joinDate: string; // سلسلة تاريخ ISO
}

interface DataTableProps {
  data: User[];
  columns: {
    key: keyof User;
    label: string;
    sortable?: boolean;
  }[];
}

مثال على الاستخدام

<DataTable
  data={users}
  columns={[
    { key: 'name', label: 'الاسم', sortable: true },
    { key: 'email', label: 'البريد', sortable: true },
    { key: 'role', label: 'الدور', sortable: true },
    { key: 'department', label: 'القسم', sortable: true },
    { key: 'salary', label: 'الراتب', sortable: true },
  ]}
/>

تلميحات

  • استخدم useMemo لتخزين النتائج المصفاة والمرتبة مؤقتًا
  • استخدم useCallback لمعالجات الأحداث المُمررة للمكونات الفرعية
  • فكّر في useRef لإدارة تركيز حقل البحث
  • أجّل البحث باستخدام خطاف useDebounce مخصص
  • لأكثر من 10 آلاف صف، فكّر في عرض الصفوف المرئية فقط (المحاكاة الافتراضية) أو اعتمد على ترقيم الصفحات

معايير التقييم

البحث/التصفية: حقل نصي مؤجل يُصفي عبر جميع الأعمدة مع عرض عدد النتائج20 نقاط
الترتيب: رؤوس الأعمدة تبدّل الترتيب التصاعدي/التنازلي مع مؤشرات مرئية، يتعامل مع أنواع السلاسل والأرقام20 نقاط
ترقيم الصفحات: 20 صفًا لكل صفحة، تنقل السابق/التالي، عداد الصفحات، إعادة تعيين عند تغيير البحث20 نقاط
الأداء: يستخدم useMemo للبيانات المحسوبة، useCallback للمعالجات، يتعامل مع 10 آلاف+ صف بكفاءة20 نقاط
التنقل بلوحة المفاتيح: مفاتيح الأسهم تتنقل بين الصفوف، Enter يحدد، Escape يمسح البحث20 نقاط

حلك

هذا المعمل يتطلب TypeScript
TSTypeScript(مطلوب)
3 محاولات مجانية متبقية