DrJ*_*lik 6 javascript next.js
我正在尝试在 Next JS 中设置分页,但我无法弄清楚如何通过 getStaticProps 实现这一点。我可以通过带有查询参数的 getServerSideProps 来做到这一点,但这不能通过 getStaticProps 访问。数据来自本地 Strapi 后端。
这是 getServerSideProps 的示例(有效):
export async function getServerSideProps({ query: { page = 1 } }) {
const { API_URL } = process.env;
const start = +page === 1 ? 0 : (+page - 1) * 3;
const numberOfCakesRes = await fetch(`${API_URL}/cakes/count`);
const numberofCakes = await numberOfCakesRes.json();
const res = await fetch(`${API_URL}/cakes?_limit=3&_start=${start}`);
const data = await res.json();
return {
props: {
cakes: data,
page: +page,
numberofCakes,
},
};
Run Code Online (Sandbox Code Playgroud)
}
然后我只需将按钮连接到路由器即可来回切换。
onClick={() => router.push(`/?page=${page - 1}`)}
Run Code Online (Sandbox Code Playgroud)
我需要访问类似于 getServerSideProps 中的查询参数的内容。我所要求的是否可以静态实现?
Han*_*dev 12
因为
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
};
}
Run Code Online (Sandbox Code Playgroud)
还有一个getStaticProps
功能:
export async function getStaticProps(context) {
const { page } = context.params;
// fetch page data
return {
props: { ... },
}
}
Run Code Online (Sandbox Code Playgroud)
在 Next.js文档 中了解更多关于getStaticPaths
和。getStaticProps