如何配置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
相关产品推荐
相关产品推荐

