首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在getStaticProps内部使用路由器

在getStaticProps内部使用路由器
EN

Stack Overflow用户
提问于 2020-06-02 02:26:09
回答 2查看 9.8K关注 0票数 9

我试图从一个API中获取数据,这个API根据URL的不同而变化,我试图用withRouter来实现它,但是它似乎在getStaticProps内部行不通。

我目前有以下代码:

代码语言:javascript
复制
export async function getStaticProps({ router }) {
const pageRequest = `http://localhost:3000/api/posts/${router.query.pid}`
const res = await fetch(pageRequest)
const json = await res.json()
return {
    props: {
        json,
    },
}
}

它回来了:

代码语言:javascript
复制
TypeError: Cannot read property 'query' of undefined

在getStaticProps中获取URL中的变量要使用的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-02 05:17:55

getStaticProps在构建时调用的。您没有路由器,因为没有执行请求。

如果动态页面看起来像/pages/[pid].js,您可以在context.params.pid中访问pid

代码语言:javascript
复制
export async function getStaticProps(context) {
  const pid = context.params.pid
  return {
    props: {}, // will be passed to the page component as props
  }
}

注意,在动态路由中使用静态导出需要您需要预先指定所有可能的ID,以便Next.js知道要生成哪些页面。

代码语言:javascript
复制
export async function getStaticPaths() {
  return {
    paths: [
      { params: { pid: '1' } },
      { params: { pid: '2' } }
    ],
    fallback: true or false // See the "fallback" section below
  };
}

另外,在getStaticProps中不能调用同一个项目的Next.js API路由,因为它是在构建时执行的(没有服务器正在运行)。您可以直接从数据库中获取数据,而无需调用API。

我建议阅读Next.js数据提取以获得更多的例子和细节。

或者,您可以在客户端获取数据。

在客户端获取数据

getStaticProps

票数 17
EN

Stack Overflow用户

发布于 2021-02-18 22:36:16

我不确定这是否适用于您的情况,但是如果您使用的是can getServerSideProps,则可以使用以下方法获得查询id:

代码语言:javascript
复制
export async function getServerSideProps({ query }) {
  const pageRequest = `http://localhost:3000/api/posts/${query.pid}`
  const res = await fetch(pageRequest)
  const json = await res.json()

  return {
    props: {
        json,
    },
  }
}

我知道使用getStaticProps或getServerSideProps有不同的考虑,但是正如Nikolai在他的回答中所描述的,在这种情况下使用getStaticProps还需要更多的步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62143824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档