乐闻世界logo
搜索文章和话题

如何在 getStaticPaths 中使用多个嵌套的动态路由?

4 个月前提问
3 个月前修改
浏览次数24

1个答案

1

在Next.js中使用getStaticPaths时,如果你有多个嵌套的动态路由,比如你的页面目录结构是这样的:

shell
pages └── posts └── [year] └── [month] └── [slug].js

在这种情况下,你需要为每一个动态路由段([year], [month], [slug])提供参数。下面是一个getStaticPaths的示例,它演示了如何为上述嵌套路由结构生成路径:

javascript
export async function getStaticPaths() { // 假设你有一个可以返回所有帖子数据的函数 const posts = await getAllPosts(); // 使用帖子数据生成路径 const paths = posts.map((post) => { // 确保year, month和slug与动态路由的文件夹名称匹配 const { year, month, slug } = post; return { params: { year: year.toString(), month: month.toString(), slug: slug } }; }); return { paths, fallback: false // 或者使用 'blocking' 或 true }; }

在上面的代码中,getAllPosts是一个假设的函数,你需要根据你的数据源来替换它。它应该返回一个包含所有帖子的数组,每个帖子都有yearmonthslug属性。

paths是一个对象数组,每个对象都有一个params键,它对应于动态路由的参数。这些参数应该是字符串,这就是为什么在上面的例子中,我们调用了toString()方法来确保值是字符串形式的。

fallback键告诉Next.js如何处理不在paths数组中的路径。如果fallback设置为false,那么任何不在paths数组中的路径都会导致404错误。如果设置为trueblocking,Next.js将尝试动态地生成页面。

请注意,getStaticPaths只在构建时运行,因此如果你的帖子数据是动态更新的,则需要重新生成站点以更新路径列表。如果你想要实现完全静态的增量生成,可以考虑使用fallback: 'blocking'。在生产环境中,当请求不在paths中的路径时,Next.js将在服务器上渲染页面,然后缓存以供将来请求。

2024年6月29日 12:07 回复

你的答案