FanMa 博客 包含了关于前端学习的一系列内容,涵盖了 HTML、CSS、JavaScript、TypeScript、React、Next.js 等全栈方面的学习笔记。博客以技术为核心,深入浅出地讲解了这些技术的基础概念、实际应用以及最佳实践,并且结合了博主的个人经验和实践经历进行分享,有助于读者更好地理解和掌握这些技术。如果你有前端学习的需求或者对这些技术感兴趣,那么 FanMa 博客 将是帮助你实现这些目标的绝佳资源。

使用 Next.js 读取 matter 文章信息
- 330

设置 getStaticProps

我们需要获取必要的数据来渲染给定 id 的文章。

为此,再次打开 libposts.js 并在底部添加以下 getPostData 函数。它将根据id返回文章数据:

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,
  };
}

然后,打开页面 posts[id].js 并将此行:

import { getAllPostIds } from '....libposts';

替换为以下代码:

import { getAllPostIds, getPostData } from '....libposts';

export async function getStaticProps({ params }) {
  const postData = getPostData(params.id);
  return {
    props {
      postData,
    },
  };
}

文章页面正在使用 getPostData 函数在 getStaticProps 中获取文章数据并将其作为 props 返回。

更新 Post 组件

现在,让我们更新 Post 组件以使用 postData 。在页面 posts[id].js 中,用以下代码替换导出的 Post 组件:

export default function Post({ postData }) {
  return (
    Layout
      {postData.title}
      br 
      {postData.id}
      br 
      {postData.date}
    Layout
  );
}

完成了!尝试访问这些页面:

  • http://localhost:3000/posts/first
  • http://localhost:3000/posts/about

现在,您应该能够看到每个页面的博客数据.

太好了!我们已成功生成动态路由。

我们仍然没有显示博客 Markdown 内容,下一篇文章主要给大家讲显示博客 Markdown 内容。