معمل
بناء جدول بيانات قابل للبحث
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 آلاف صف، فكّر في عرض الصفوف المرئية فقط (المحاكاة الافتراضية) أو اعتمد على ترقيم الصفحات
ما يجب تقديمه
يجب أن يحتوي تقديمك على قسم ملف واحد في المحرر أدناه: ملف مكون React يحتوي على مكون DataTable وخطاف useDebounce.
معايير التقييم
البحث/التصفية: حقل نصي مؤجل يُصفي عبر جميع الأعمدة مع عرض عدد النتائج20 نقاط
الترتيب: رؤوس الأعمدة تبدّل الترتيب التصاعدي/التنازلي مع مؤشرات مرئية، يتعامل مع أنواع السلاسل والأرقام20 نقاط
ترقيم الصفحات: 20 صفًا لكل صفحة، تنقل السابق/التالي، عداد الصفحات، إعادة تعيين عند تغيير البحث20 نقاط
الأداء: يستخدم useMemo للبيانات المحسوبة، useCallback للمعالجات، يتعامل مع 10 آلاف+ صف بكفاءة20 نقاط
التنقل بلوحة المفاتيح: مفاتيح الأسهم تتنقل بين الصفوف، Enter يحدد، Escape يمسح البحث20 نقاط
قائمة التحقق
0/9حلك
3 محاولات مجانية متبقية