Next.js getStaticProps 没有返回数据
Next.js getStaticProps not returning data
我正在 Next.js 创建博客并使用 Strapi 无头 CMS 作为后端。
我试图从我用 Strapi 制作的 API 中获取数据。
用于获取我制作的数据
./client.js
export default class StrapiClient{
constructor(){}
/*API_URL = "http://localhost:1337/api/"*/
async fetchData(path){
const url = `${process.env.API_URL}${path}`
const res = await fetch(url)
const posts = await res.json()
return posts
}}
并将其导入到 ./components/blog.js
import StrapiClient from '../client'
const Client = new StrapiClient
export const getStaticProps = async () => {
const posts = await Client.fetchData(`articles`)
return{
props: {
posts,
}
}
};
const Blog = ({posts}) => {
return (
<div>
{posts.data.map((element) => {
return(
<div key={element.id}>
<h1 className=" text-2xl">{element.attributes.title}</h1>
</div>
)
})}
</div>
);
};
export default Blog;
但是我得到了错误
TypeError: Cannot read properties of undefined (reading 'data')
这是我使用的数据结构
{
"data" : [
"id" /*string*/
]
}
您需要 await
异步函数从 Promise
获取数据
export const getStaticProps = async () => {
const posts = await Client.fetchData(`articles`)
return{
props: {
posts,
}
}
};
Async functions always return a promise
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
const posts = Client.fetchData(`articles`)
我认为您需要 await
获取数据。
编辑:
我刚刚注意到您使用的是 getStaticPaths
函数而不是 getStaticProps
。能否请您更改名称并重试?
来自 next.js 文档 getStaticPaths method is used to define a list of paths to be statically generated but to fetch data for page you need to use getStaticProps:
export async function getStaticProps() {
const posts = await Client.fetchData(`articles`);
return {
props: {
posts,
},
}
}
或者使用getServerSideProps获取数据而不使用getStaticPaths
:
export async function getServerSideProps() {
const posts = await Client.fetchData(`articles`);
return { props: { posts } }
}
我正在 Next.js 创建博客并使用 Strapi 无头 CMS 作为后端。
我试图从我用 Strapi 制作的 API 中获取数据。
用于获取我制作的数据 ./client.js
export default class StrapiClient{
constructor(){}
/*API_URL = "http://localhost:1337/api/"*/
async fetchData(path){
const url = `${process.env.API_URL}${path}`
const res = await fetch(url)
const posts = await res.json()
return posts
}}
并将其导入到 ./components/blog.js
import StrapiClient from '../client'
const Client = new StrapiClient
export const getStaticProps = async () => {
const posts = await Client.fetchData(`articles`)
return{
props: {
posts,
}
}
};
const Blog = ({posts}) => {
return (
<div>
{posts.data.map((element) => {
return(
<div key={element.id}>
<h1 className=" text-2xl">{element.attributes.title}</h1>
</div>
)
})}
</div>
);
};
export default Blog;
但是我得到了错误
TypeError: Cannot read properties of undefined (reading 'data')
这是我使用的数据结构
{
"data" : [
"id" /*string*/
]
}
您需要 await
异步函数从 Promise
export const getStaticProps = async () => {
const posts = await Client.fetchData(`articles`)
return{
props: {
posts,
}
}
};
Async functions always return a promise
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
const posts = Client.fetchData(`articles`)
我认为您需要 await
获取数据。
编辑:
我刚刚注意到您使用的是 getStaticPaths
函数而不是 getStaticProps
。能否请您更改名称并重试?
来自 next.js 文档 getStaticPaths method is used to define a list of paths to be statically generated but to fetch data for page you need to use getStaticProps:
export async function getStaticProps() {
const posts = await Client.fetchData(`articles`);
return {
props: {
posts,
},
}
}
或者使用getServerSideProps获取数据而不使用getStaticPaths
:
export async function getServerSideProps() {
const posts = await Client.fetchData(`articles`);
return { props: { posts } }
}