Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

حالات التحميل

جزء من قسم أساسيات Next.js في رحلة React على Coddy — الدرس 26 من 47.

إن الصفحة الواحدة من نوع async تكون سرعتها بتحكّم أبطأ عملية تحميل فيها (`load`). وبينما ينتظر Next.js، ماذا يشاهد المستخدم بالتحديد؟

ضع ملف loading.jsx بجوار الصفحة وستكون النتيجة: أي شيء تريده.

app/
    slow/
        page.jsx       the async page
        loading.jsx    shown while it resolves

إنه مكون عادي بـ `export default` (تصدير افتراضي)، ولا يأخذ أي props:

export default function Loading() {
    return <p>Loading the special…</p>;
}

أنت لا تقوم بتصييره بنفسك أبداً ولا تقوم باستيراده أبداً. وضع الملف بجانب الصفحة يغلف تلك الصفحة داخل حجم معلق (Suspense boundary): يقوم Next.js بـ عرض loading.jsx في اللحظة التي تتنقل فيها، ويستبدلها بالصفحة الحقيقية عندما تنتهي عمليات async/الانتظار (awaits)، دون أن ترمش الواجهة الخارجية المحيطة (layout).

ينتج أمران عن المكان الذي يقع فيه الملف:

  • فهو يغطي الصفحة المجاورة له وكل شيء متداخل أسفله، إلى أن يتولى ملف loading.jsx أعمق المسؤولية
  • الصفحة فقط هي التي تتغير: بينما تظل الترويسات وعناصر التنقل من المخطط (layout) ثابتة وقابلة للنقر

لاحظ ما لم تقم بـ كتابته: لا علم تحميل (loading flag)، ولا حالة (state)، ولا if (loading). اسم الملف هو آلية العمل نفسها.

challenge icon

التحدي

سهل

ينتظر app/slow/page.jsx عملية load بطيئة، و app/slow/loading.jsx موجود بالفعل ولكنه فارغ.

  1. داخل عنصر <main> الخاص به، أضف <p> مع id="loading".
  2. يجب أن يكون نصه بالضبط Loading the special...

الصفحة و lib/data.js مقفولان. تنتقل الاختبارات إلى /slow وتفحص الشاشة قبل وصول الـ data.

جرّب بنفسك

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات Next.js