Rendu de Markdown
Pour afficher du contenu Markdown, nous allons utiliser la bibliothèque remark
. Commençons par l'installer :
npm install remark remark-html
Ensuite, ouvrez lib/posts.js
et ajoutez les imports suivants en haut du fichier :
import { remark } from 'remark';
import html from 'remark-html';
Et mettez à jour la fonction getPostData()
dans le même fichier pour utiliser remark
:
export async function getPostData(id) {
const fullPath = path.join(postsDirectory, `${id}.md`);
const fileContents = fs.readFileSync(fullPath, 'utf8');
// Utilise gray-matter pour analyser la section de métadonnées du post
const matterResult = matter(fileContents);
// Utilise remark pour convertir le Markdown en chaîne HTML
const processedContent = await remark()
.use(html)
.process(matterResult.content);
const contentHtml = processedContent.toString();
// Combine les données avec l'id et contentHtml
return {
id,
contentHtml,
...matterResult.data,
};
}
Important : Nous avons ajouté le mot-clé
async
àgetPostData
car nous devons utiliserawait
pourremark
.async
/await
vous permet de récupérer des données de manière asynchrone.
Cela signifie que nous devons mettre à jour getStaticProps
dans pages/posts/[id].js
pour utiliser await
lors de l'appel à getPostData
:
export async function getStaticProps({ params }) {
// Ajoutez le mot-clé "await" comme ceci :
const postData = await getPostData(params.id);
return {
props: {
postData,
},
};
}
Enfin, mettez à jour le composant Post
dans pages/posts/[id].js
pour afficher contentHtml
en utilisant dangerouslySetInnerHTML
:
export default function Post({ postData }) {
return (
<Layout>
{postData.title}
<br />
{postData.id}
<br />
{postData.date}
<br />
<div dangerouslySetInnerHTML={{ __html: postData.contentHtml }} />
</Layout>
);
}
Essayez de visiter à nouveau ces pages :
Vous devriez maintenant voir le contenu du blog :
Nous avons presque terminé ! Passons maintenant au polissage de chaque page.