如何在Next.JS中有一个类似于静态导出的回退行为



我的nextjs应用是静态导出的。通过使用getStaticPaths和getStaticProps,我在构建时正确呈现了动态页面。它们在一个名为[exercise].js的文件中定义,并带有一个参数。

我可以生成大多数这样的页面,没有任何问题。但是,我希望能够静态地生成我的大多数页面,并且在生产构建期间,当页面没有静态渲染时,仍然能够根据需要使用客户端渲染生成新页面。

然而,根据文档,我可以为我的动态页面启用或禁用回退。但我不能启用回退,因为我静态导出应用程序。如果禁用了回退,我就不能自己进行任何客户端数据获取和页面呈现,因为对于构建期间未生成的任何页面,默认情况下都会返回404 not found响应。

我希望我可以保持静态导出我的页面,并且仍然有一些方法在客户端呈现它们,当它们不可静态使用时。

我不期望任何增量SSR,因为我没有一个后端服务器在nextJs,只是希望能够获取数据(从另一个非nextJs API),每次有人击中一个特定的页面没有预渲染。我也知道这些网页不会被搜索引擎正确索引。

我有什么办法可以做到这一点吗?

我设法通过入侵404页面来解决这个问题:404.tsx/js

这不是一个容易优雅地解决的问题,因为从本质上讲,静态导出期望在默认情况下提供所有页面,而重定向实际上需要由后端处理。大多数提供程序会重定向到Next.JS提供的404页面。我们可以利用这个优势,在404页面上呈现我们想要的内容:

// in your 404.tsx
const NotFound: FC = () => {
const router = useRouter();
const path = router.asPath;
// This will match for dynamic/<id>/path
const match = path.match(/^/dynamic/(.+)/path$/);
// Check to see if current route is your dynamic route...
if (match) {
const id = match[1]; 
// if so, render your dynamic component
return <YourDynamicComponent id={id}/>;

}
// else render regular 404 page
return <NotFoundPage />
}

限制虽然普通用户将看到他们想要的内容,但静态服务器仍将返回404代码。这将使网页表现不同的网络爬虫或机器人。

相关内容

  • 没有找到相关文章

最新更新