You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中如何用getStaticProps结合fallback预渲染前50篇博客(无需枚举路径)

解决方案

针对你的需求,这里提供两种正确的实现方式,取决于你的posts或postFilePaths的结构:

方式一:从已解析的帖子数据数组中提取前50个slug

假设你已经通过文件读取并解析了所有MDX帖子,得到了包含元数据的posts数组(每个元素包含data.slug字段):

export const getStaticPaths = async () => {
  // 截取前50篇帖子,提取每篇的slug
  const preRenderedSlugs = posts.slice(0, 50).map(post => post.data.slug);
  
  // 转换为Next.js要求的paths格式
  const paths = preRenderedSlugs.map(slug => ({
    params: { slug }
  }));

  return {
    paths,
    // 使用fallback: 'blocking':首次访问未预渲染页面时,服务端渲染并缓存静态文件
    // 若用fallback: true:先返回空白页,客户端异步加载数据并生成静态文件(适合需要快速首屏的场景)
    fallback: 'blocking'
  };
};

方式二:直接从文件路径数组中处理前50个路径

如果你的postFilePaths是存储所有MDX文件路径的数组,可直接截取前50个路径处理:

export const getStaticPaths = async () => {
  // 截取前50个MDX文件路径
  const preRenderedFilePaths = postFilePaths.slice(0, 50);
  
  // 移除文件后缀,转换为slug并生成paths结构
  const paths = preRenderedFilePaths.map(path => {
    const slug = path.replace(/\.mdx?$/, "");
    return { params: { slug } };
  });

  return {
    paths,
    fallback: 'blocking'
  };
};

关键说明

你之前的错误在于直接对posts.slice(0,50)(这是一个数组)访问data.slug,数组本身没有这个属性,必须遍历数组中的每个帖子对象来提取slug。

内容的提问来源于stack exchange,提问作者jonas-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:13:37