تفاصيل المسارات الديناميكية
هذه بعض المعلومات الأساسية التي يجب أن تعرفها عن المسارات الديناميكية.
جلب بيانات من واجهة برمجة تطبيقات خارجية أو استعلام قاعدة بيانات
مثل getStaticProps
، يمكن لـ getStaticPaths
جلب البيانات من أي مصدر بيانات. في مثالنا، getAllPostIds
(الذي يستخدمه getStaticPaths
) قد يجلب البيانات من نقطة نهاية لواجهة برمجة تطبيقات خارجية:
export async function getAllPostIds() {
// بدلاً من نظام الملفات،
// جلب بيانات المنشورات من نقطة نهاية لواجهة برمجة تطبيقات خارجية
const res = await fetch('..');
const posts = await res.json();
return posts.map((post) => {
return {
params: {
id: post.id,
},
};
});
}
وضع التطوير مقابل وضع الإنتاج
- في وضع التطوير (
npm run dev
أوyarn dev
)، يتم تشغيلgetStaticPaths
في كل طلب. - في وضع الإنتاج، يتم تشغيل
getStaticPaths
في وقت البناء.
الاحتياطي (Fallback)
تذكر أننا قمنا بإرجاع fallback: false
من getStaticPaths
. ماذا يعني هذا؟
إذا كان fallback
هو false
، فإن أي مسارات لم يتم إرجاعها بواسطة getStaticPaths
ستؤدي إلى صفحة 404.
إذا كان fallback
هو true
، فإن سلوك getStaticProps
يتغير:
- سيتم تحويل المسارات التي تم إرجاعها من
getStaticPaths
إلى HTML في وقت البناء. - المسارات التي لم يتم إنشاؤها في وقت البناء لن تؤدي إلى صفحة 404. بدلاً من ذلك، سيقدم Next.js نسخة "احتياطية" من الصفحة عند أول طلب لهذا المسار.
- في الخلفية، سيقوم Next.js بإنشاء المسار المطلوب بشكل ثابت. الطلبات اللاحقة لنفس المسار ستقدم الصفحة التي تم إنشاؤها، تمامًا مثل الصفحات الأخرى التي تم تقديمها مسبقًا في وقت البناء.
إذا كان fallback
هو blocking
، فسيتم تقديم المسارات الجديدة من جانب الخادم باستخدام getStaticProps
، وتخزينها مؤقتًا للطلبات المستقبلية بحيث تحدث مرة واحدة فقط لكل مسار.
هذا يتجاوز نطاق دروسنا، ولكن يمكنك معرفة المزيد عن fallback: true
و fallback: 'blocking'
في توثيق fallback
.
مسارات التقاط الكل (Catch-all Routes)
يمكن توسيع المسارات الديناميكية لالتقاط جميع المسارات عن طريق إضافة ثلاث نقاط (...
) داخل الأقواس. على سبيل المثال:
pages/posts/[...id].js
تطابق/posts/a
، ولكن أيضًا/posts/a/b
،/posts/a/b/c
وهكذا.
إذا قمت بذلك، في getStaticPaths
، يجب عليك إرجاع مصفوفة كقيمة لمفتاح id
كما يلي:
return [
{
params: {
// ينشئ بشكل ثابت /posts/a/b/c
id: ['a', 'b', 'c'],
},
},
//...
];
وسيكون params.id
مصفوفة في getStaticProps
:
export async function getStaticProps({ params }) {
// params.id سيكون مثل ['a', 'b', 'c']
}
اطلع على توثيق مسارات التقاط الكل لمعرفة المزيد.
الموجه (Router)
إذا كنت ترغب في الوصول إلى موجه Next.js، يمكنك القيام بذلك عن طريق استيراد خطاف useRouter
من next/router
.
صفحات 404
لإنشاء صفحة 404 مخصصة، قم بإنشاء pages/404.js
. يتم إنشاء هذا الملف بشكل ثابت في وقت البناء.
// pages/404.js
export default function Custom404() {
return <h1>404 - الصفحة غير موجودة</h1>;
}
اطلع على توثيق صفحات الخطأ لمعرفة المزيد.
المزيد من الأمثلة
لقد أنشأنا عدة أمثلة لتوضيح getStaticProps
و getStaticPaths
— اطلع على كود المصدر الخاص بهم لمعرفة المزيد:
- بداية مدونة باستخدام ملفات markdown (عرض تجريبي)
- مثال WordPress (عرض تجريبي)
- مثال DatoCMS (عرض تجريبي)
- مثال TakeShape (عرض تجريبي)
- مثال Sanity (عرض تجريبي)
هذا كل شيء!
في الدرس التالي، سنتحدث عن مسارات API في Next.js.