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

如何配置getStaticPaths以让getStaticProps获取slug与number参数值?

解决方法

你的问题在于当前代码把所有漫画的slug数组直接赋值给了每个章节number对应的slug参数,这会导致每个路径的params里slug是所有slug的数组,而不是对应漫画的单个slug。正确的做法是先获取每个漫画的slug及其对应的所有章节number,再生成一一对应的路径参数组合。

修改后的代码如下:

export async function getStaticPaths() {
  // 一次性获取每个漫画的slug和对应的章节列表
  const comicsWithChapters = await client.fetch(
    `*[_type == "comic" && defined(slug.current)]{
      "slug": slug.current,
      "chapters": chapters[].number
    }`
  );

  // 生成所有 slug + number 的组合路径
  const paths = comicsWithChapters.flatMap(comic => 
    comic.chapters.map(number => ({
      params: { 
        slug: comic.slug,
        number: number.toString() // Next.js要求params值为字符串类型
      }
    }))
  );

  return {
    paths,
    fallback: false,
  };
}

关键说明:

  • 调整Sanity查询语句,一次性拉取每个漫画的slug和对应章节列表,避免两次单独查询导致的关联错误。
  • 用flatMap遍历每个漫画,再对每个漫画的章节做map,生成每个章节对应的正确slug和number参数组合。
  • 将number转为字符串:Next.js的getStaticPaths要求params中的值必须是字符串类型,若你的number是数字类型,需要显式转换。

内容的提问来源于stack exchange,提问作者Yaakoubi Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:15:36