render markdown in nextjs
- Install required dependencies:
npm install gray-matter remark remark-html
- Create a Markdown file (e.g.,
example.md
) with content:
---
title: Example Markdown
---
# Hello, Next.js!
This is an example Markdown file.
- Create a component to render Markdown (
MarkdownComponent.js
):
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
import remark from 'remark';
import html from 'remark-html';
export default function MarkdownComponent({ content, data }) {
return (
<div>
<h1>{data.title}</h1>
<div dangerouslySetInnerHTML={{ __html: content }} />
</div>
);
}
export async function getStaticProps() {
const filePath = path.join(process.cwd(), 'example.md');
const fileContent = fs.readFileSync(filePath, 'utf8');
const { content, data } = matter(fileContent);
const processedContent = await remark().use(html).process(content);
const contentHtml = processedContent.toString();
return {
props: {
content: contentHtml,
data,
},
};
}
- Use the component in a page (
pages/index.js
):
import MarkdownComponent from '../components/MarkdownComponent';
export default function Home({ content, data }) {
return (
<div>
<h1>Next.js Markdown Example</h1>
<MarkdownComponent content={content} data={data} />
</div>
);
}
- Run the Next.js development server:
npm run dev
Visit http://localhost:3000
in your browser to see the rendered Markdown content.