NextJS中的静态分页

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].jspages目录中创建一个并导出一个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