2 回答
TA贡献1856条经验 获得超11个赞
如果您真的想将查询参数用于分页(类似/foo?page=2
)和 SSG,我刚刚想出了一个解决方法。
您可以使用 Next JSrewrites
和redirects
功能。
首先,使用/foo/[page].js
文件格式并静态生成所有页面,正如hangindev.com 解释的那样。
然后,在next.config.js
文件中,您必须导出两个函数:async redirects()
和async rewrites()
.
module.exports = {
....
async redirects() {
return [
{
source: "/foo/1",
destination: "/foo?page=1",
permanent: true,
},
{
source: "/foo/2",
destination: "/foo?page=2",
permanent: true,
},
{
source: "/foo/3",
destination: "/foo?page=3",
permanent: true,
},
];
},
async rewrites() {
return [
{
source: "/foo",
has: [{ type: "query", key: "page", value: "1" }],
destination: "/foo/1",
},
{
source: "/foo",
has: [{ type: "query", key: "page", value: "2" }],
destination: "/foo/2",
},
{
source: "/foo",
has: [{ type: "query", key: "page", value: "3" }],
destination: "/foo/3",
},
];
},
};
该redirects()功能确保用户无法看到/foo/2格式的页面,因为他们被重定向到/foo?page=2. 该rewrites()函数显示URL的/foo/2页面内容。/foo?page=2
TA贡献1878条经验 获得超4个赞
因为getStaticProps在构建时运行,所以它不会接收仅在请求期间可用的数据,例如查询参数 或 HTTP 标头,因为它会生成静态 HTML。 文档
您可以做的一件事是不要将页面编号放在查询中,而是将其作为路由参数,即用户将访问/3而不是/?page=3.
要实现它,你需要[page].js在pages目录中创建一个并导出一个getStaticPaths函数:
export async function getStaticPaths() {
// query Strapi to calculate the total page number
return {
paths: [
{ params: { page: '1' } },
{ params: { page: '2' } },
{ params: { page: '3' } }
],
fallback: true or false // See the "fallback" section in docs
};
}
还有一个getStaticProps功能:
export async function getStaticProps(context) {
const { page } = context.params;
// fetch page data
return {
props: { ... },
}
}
在 Next.js文档getStaticPaths中了解更多信息。getStaticProps
添加回答
举报