Nextjs 13“未找到”与generateStaticParams不兼容?

Aar*_*den 2 next.js next.js13

我使用 Nextjs 13 的“generateStaticParams”函数在与我从另一个函数获取的数据中的一组 id 不匹配的路由上抛出 404,如下所示:

export async function generateStaticParams() {
  const posts = await PostsData();
  return posts.map((post) => ({
    postId: post.id,
  }));
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种拥有自定义 404 页面的方法。据我了解,为了拥有自定义 404 页面,您需要创建一个“not-found.tsx”页面,并从“next/navigation”导入“notFound”。notFound()如果您无法找到与页面参数中找到的 ID 相匹配的项目,则需要调用“ ”。

但是,如果我删除 .notFound() 函数,则该 notFound() 函数只会将用户路由到自定义 404 generateStaticParams()。如果该功能仍然存在,用户仍会被路由到 Nextjs 13 的默认 404 页面。

这两个功能不兼容吗?如果我想使用,我是否无法拥有自定义 404 页面generateStaticParams()?在此非常感谢任何帮助。

Aar*_*den 6

编辑:请参阅 Maciej Wira 的评论。该解决方案可能并不完全完整。

很快就找到了答案。为了防止 Nextjs 即使在非静态生成的路由上自动生成页面,我使用了:

export const dynamicParams = false;
Run Code Online (Sandbox Code Playgroud)

删除此行允许我保留现有路由上的 SSG 功能,并且调用notFound()允许我将用户路由到由我的内容定义的自定义 404 页面not-found.tsx