تنفيذ getStaticPaths
أولاً، لنقم بإعداد الملفات:
- أنشئ ملفًا باسم
[id].js
داخل مجلدpages/posts
. - أيضًا، قم بإزالة
first-post.js
داخل مجلدpages/posts
— لن نستخدمه بعد الآن.
ثم، افتح pages/posts/[id].js
في محرر النصوص والصق الكود التالي. سنقوم بملء ...
لاحقًا:
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
بعد ذلك، افتح lib/posts.js
وأضف الدالة getAllPostIds
التالية في الأسفل. ستعيد هذه الدالة قائمة بأسماء الملفات (باستثناء .md
) في مجلد posts
:
export function getAllPostIds() {
const fileNames = fs.readdirSync(postsDirectory);
// تُعيد مصفوفة تبدو كالتالي:
// [
// {
// params: {
// id: 'ssg-ssr'
// }
// },
// {
// params: {
// id: 'pre-rendering'
// }
// }
// ]
return fileNames.map((fileName) => {
return {
params: {
id: fileName.replace(/\.md$/, ''),
},
};
});
}
هام: القائمة المُعادة ليست مجرد مصفوفة من السلاسل — يجب أن تكون مصفوفة من الكائنات التي تبدو مثل التعليق أعلاه. يجب أن يحتوي كل كائن على مفتاح params
ويتضمن كائنًا بمفتاح id
(لأننا نستخدم [id]
في اسم الملف). وإلا، ستفشل الدالة getStaticPaths
.
أخيرًا، سنستورد دالة getAllPostIds
ونستخدمها داخل getStaticPaths
. افتح pages/posts/[id].js
وانسخ الكود التالي قبل تصدير مكون Post
:
import { getAllPostIds } from '../../lib/posts';
export async function getStaticPaths() {
const paths = getAllPostIds();
return {
paths,
fallback: false,
};
}
- يحتوي
paths
على مصفوفة المسارات المعروفة التي تُعيدهاgetAllPostIds()
، والتي تتضمن المعلمات المحددة بواسطةpages/posts/[id].js
. تعلم المزيد في توثيق مفتاح paths - تجاهل
fallback: false
حاليًا — سنشرح ذلك لاحقًا.
نحن على وشك الانتهاء — ولكن ما زال علينا تنفيذ getStaticProps
. لنقم بذلك في الصفحة التالية!