Implémentation de getStaticPaths
Commençons par configurer les fichiers :
- Créez un fichier appelé
[id].js
dans le répertoirepages/posts
. - Supprimez également
first-post.js
dans le répertoirepages/posts
— nous ne l'utiliserons plus.
Ensuite, ouvrez pages/posts/[id].js
dans votre éditeur et collez le code suivant. Nous remplirons les ...
plus tard :
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
Puis, ouvrez lib/posts.js
et ajoutez la fonction getAllPostIds
suivante à la fin. Elle retournera la liste des noms de fichiers (en excluant .md
) dans le répertoire posts
:
export function getAllPostIds() {
const fileNames = fs.readdirSync(postsDirectory);
// Retourne un tableau qui ressemble à ceci :
// [
// {
// params: {
// id: 'ssg-ssr'
// }
// },
// {
// params: {
// id: 'pre-rendering'
// }
// }
// ]
return fileNames.map((fileName) => {
return {
params: {
id: fileName.replace(/\.md$/, ''),
},
};
});
}
Important : La liste retournée n'est pas simplement un tableau de chaînes de caractères — elle doit être un tableau d'objets qui ressemblent au commentaire ci-dessus. Chaque objet doit avoir la clé params
et contenir un objet avec la clé id
(car nous utilisons [id]
dans le nom du fichier). Sinon, getStaticPaths
échouera.
Enfin, nous allons importer la fonction getAllPostIds
et l'utiliser dans getStaticPaths
. Ouvrez pages/posts/[id].js
et copiez le code suivant au-dessus du composant exporté Post
:
import { getAllPostIds } from '../../lib/posts';
export async function getStaticPaths() {
const paths = getAllPostIds();
return {
paths,
fallback: false,
};
}
paths
contient le tableau des chemins connus retournés pargetAllPostIds()
, qui incluent les params définis parpages/posts/[id].js
. Pour en savoir plus, consultez la documentation sur la clépaths
- Ignorez
fallback: false
pour l'instant — nous l'expliquerons plus tard.
Nous y sommes presque — mais il nous reste encore à implémenter getStaticProps
. Faisons cela dans la page suivante !