Come abbiamo fatto nella pagina index, dobbiamo creare una funzione getStaticProps che sarà utilizzata al momento del Pre-rendering per riempire la pagina di ogni post con i dati presi dal suo file markdown.
Apri lib/posts.js e aggiungi questa funzione:
export function getPostData(id) {
const fullPath = path.join(postsDirectory, `${id}.md`);
const fileContents = fs.readFileSync(fullPath, 'utf8');
// Use gray-matter to parse the post metadata section
const matterResult = matter(fileContents);
// Combine the data with the id
return {
id,
...matterResult.data,
};
}
Essa, dato l'id di un post, ne apre il file e usa gray-matter per estrarre i metadati. Apri pages/posts/[id].js e sostituisci questa riga: ...con queste: Nota che abbiamo modificato l'import per importare entrambe le funzioni dal file lib/posts.
Abbiamo poi implementato il famoso metodo getStaticProps che sarà usato al momento del pre-rendering e fornirà al componente Post le props con i dati del singolo post. Facciamo ora in modo che Post usi i dati ricevuti, riscrivendolo in questo modo:
...in apparenza niente di eccezionale, ma prova a pensare come sono state costruite: tu hai scritto l'articolo in formato md inserendo solo titolo, data e testo... tutto il resto lo ha fatto NextJS, e la cosa bella è che adesso che è tutto pronto lo farà anche per gli altri 100 articoli che inserirai in quella cartella. L'altra cosa bella è che se un giorno vorrai cambiare il layout del sito, non avrai bisogno di modificare le pagine di tutti gli articoli, perché si aggiorneranno da sole!