React.lazy React.lazy للتحميل الكسول

آخر تحديث: 2026-11-03

React.lazy React.lazy للتحميل الكسول

React.lazy(() => import('./Page')) يحوّل مكوّنًا إلى حزمة تُنزَّل «عند الحاجة»، ويعرض Suspense واجهة بديلة أثناء التنزيل. فالرسم الأول يَشحن كود الصفحة الرئيسية فقط، وتُجلب بقية المسارات عند الطلب، وهي الضربة الأولى الكبرى لتسريع تطبيق الصفحة الواحدة وأسهلها قياسًا.

المجموعةالتوجيه وإدارة الحالة
النوعواجهة برمجية
منذ الإصدارReact 16.6

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

import { lazy, Suspense } from 'react'

const AdminPage = lazy(() => import('./AdminPage'))  // dynamic import splits the bundle

<Suspense fallback={<p>Loading…</p>}>
  <AdminPage />   {/* the chunk is requested at render time and replaces the fallback once ready */}
</Suspense>

⚙️ المعاملات

factoryدالة المصنع () => import('./X'): تُعيد وعد الوحدة، وتحتاج الوحدة إلى تصدير افتراضي (ومنذ React 18 يمكن استخدام then لتسمية تصدير مسمّى صراحة).

القيمة المرجعة:lazy(factory) يُعيد مكوّنًا جديدًا: تبدأ الوحدة بالتحميل عند أول رسم، وحتى اكتمالها يرمي لأقرب حدود Suspense ليعرض بديله.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

النقر على الزر يعرض بديل «جارٍ التنزيل» 1.2 ثانية ثم يبدّل إلى المحتوى المُحمّل — انتقال Suspense من البديل إلى المكوّن الكسول (عرض توضيحي محاكى).

💡 النقاط الأساسية

⚠️ تحذير وحدة المكوّن الكسول يجب أن تُصدّر افتراضيًا (أو تُغلَّف بـ then)، وإلا يرمي الرسم خطأً؛ واقترن بـ ErrorBoundary لاصطياد فشل التحميل.
💡 نصيحة أكثر ما يُقرن التحميل الكسول بالتوجيه: لفّ كل صفحة Route بزوج lazy + Suspense فينخفض JS الأول غالبًا إلى النصف.
ℹ️ ملاحظة في التطوير المحلي يُحمَّل الحزمة لحظيًا فلا تلاحظ فرقًا؛ ابنِ بـ vite build && vite preview لتحسّ بالتقسيم الحقيقي.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

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

س ما علاقة lazy بـ Suspense؟
ج lazy يُعلن «هذا المكوّن يُحمَّل عند الطلب»، وSuspense يصطاد حالة «لم يجهز بعد» ويرسم البديل. لا بد أن يأتيا زوجًا.
س يومض البديل لحظة فيبدو قبيحًا
ج حوّل البديل إلى شاشة هيكلية فتقلّ وثبة العرض؛ ويمكنك إضافة تلميحات modulepreload للحزم الحرجة لتبدأ التنزيل مبكرًا.
س مكوّني الكسول له تصدير مسمّى فقط
ج لفّه بنفسك: lazy(() => import('./X').then(m => ({ default: m.X }))) يحوّل التصدير المسمّى إلى افتراضي.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%