Next.js中动态路由中的getStaticProps

时间:2020-10-27 06:25:01

标签: next.js

我在Next.js页面中使用getStaticProps

export const getStaticProps = wrapper.getStaticProps(async ({ store }) => {
  store.dispatch(getInfoRequest());
  store.dispatch(END);
  await store.sagaTask.toPromise()
});

这是一条动态路线。 当我刷新页面时得到:

错误:动态SSG页面需要getStaticPaths,而'/dates/[[...info]]'缺少getStaticPaths。 了解更多:https://err.sh/next.js/invalid-getstaticpaths-value

为什么会发生此错误?

1 个答案:

答案 0 :(得分:0)

您似乎忘记了向页面添加getStaticPaths功能。静态生成动态路由页面时,都需要这两者。

由于动态路由包含可以是任何参数的参数,因此Next.js需要知道在构建时要生成哪些具体路径。这就是为什么您需要导出<--REDACTED--> Service "nextcloud/nextcloud-service" does not have any active Endpoint.的原因,该getStaticPaths的返回值中应包含一个字符串路径列表,其中的占位符已替换为实际值。

例如,如果您的动态路由为/user/[id],则getStaticPaths可能会返回:

{
  paths: [
    '/user/1',
    '/user/2',
    '/user/3'
  ],
  fallback: true
}

您可能希望在构建时动态生成这些路径,您完全可以在getStaticPaths内完成这些操作。因此,假设您已经在其他地方创建了一个名为getUsers的函数,它可能看起来像这样:

export async function getStaticPaths() {
  const users = getUsers();
  return {
    paths: users.map((u) => `/user/${u.id}`),
    fallback: true
  }
}

有关更多信息,see the documentation