我正在尝试从一个因 URL 而异的 API 中获取数据,尝试使用 withRouter 来完成它,但它似乎在 getStaticProps 中不起作用。
我目前有以下代码:
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,
},
}
}
Run Code Online (Sandbox Code Playgroud)
它回来了:
TypeError: Cannot read property 'query' of undefined
Run Code Online (Sandbox Code Playgroud)
获取 URL 中的变量以在 getStaticProps 中使用的正确方法是什么?
getStaticProps被称为在构建时。您没有路由器,因为没有执行任何请求。
如果动态页面看起来像/pages/[pid].js您可以pid在context.params.pid.
export async function getStaticProps(context) {
const pid = context.params.pid
return {
props: {}, // will be passed to the page component as props
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,对动态路由getStaticPaths使用静态导出需要. 您需要预先指定所有可能的 ID,以便 Next.js 知道要生成哪些页面。
export async function getStaticPaths() {
return {
paths: [
{ params: { pid: '1' } },
{ params: { pid: '2' } }
],
fallback: true or false // See the "fallback" section below
};
}
Run Code Online (Sandbox Code Playgroud)
此外,您不能调用自己的 API,getStaticProps因为它是在构建时执行的(没有服务器在运行)。您可以直接从数据库中获取数据,而无需 API 调用。
我建议阅读Next.js Data fetching以获取更多示例和详细信息。
或者,您可以改为在客户端获取数据。
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |