使用 getStaticProps 获取数据 Next.js 和 Typescript
Posted
技术标签:
【中文标题】使用 getStaticProps 获取数据 Next.js 和 Typescript【英文标题】:Fetching data Next.js and Typescript using getStaticProps 【发布时间】:2022-01-20 02:54:17 【问题描述】:我正在使用 TypeScript 在 Next.js 上做一个个人项目。我正在尝试获取api,然后制作项目地图,但我无法使其工作。我做了一个console.log
,它给出了未定义的。我确实将文件放在页面文件夹中。这是代码:
import InferGetStaticPropsType from 'next'
type Data =
id: string
films: string
people: string
planets: string
species: string
vehicles: string
export const getStaticProps = async () =>
const res = await fetch('https://www.swapi.tech/api/')
const swapis: Data[] = await res.json()
return
props:
swapis,
,
const FilmList = ( swapis : InferGetStaticPropsType<typeof getStaticProps>) =>
console.log('swapis', swapis)
return (
<>
<h2>List of Films</h2>
swapis.map((swapi) => (
<ul key=swapi.id>
<li>swapi.films</li>
</ul>
))
</>
);
export default FilmList;
【问题讨论】:
【参考方案1】:您的Data
类型错误。你打电话给https://www.swapi.tech/api/,它会返回
"message": "ok",
"result":
"films": "https://www.swapi.tech/api/films",
"people": "https://www.swapi.tech/api/people",
"planets": "https://www.swapi.tech/api/planets",
"species": "https://www.swapi.tech/api/species",
"starships": "https://www.swapi.tech/api/starships",
"vehicles": "https://www.swapi.tech/api/vehicles"
完整的工作示例:
import InferGetStaticPropsType from 'next';
type Data =
message: string;
result:
id: string;
films: string;
people: string;
planets: string;
species: string;
vehicles: string;
;
;
export const getStaticProps = async () =>
const res = await fetch('https://www.swapi.tech/api/');
const swapis: Data = await res.json();
return
props:
swapis,
,
;
;
const FilmList = ( swapis : InferGetStaticPropsType<typeof getStaticProps>) =>
return (
<>
<h2>List of Films</h2>
Object.entries(swapis.result).map(([key, value]) => (
<ul key=key>
<li>value</li>
</ul>
))
</>
);
;
export default FilmList;
【讨论】:
感谢@Joris,但我在屏幕上收到此错误“TypeError: Cannot convert undefined or null to object”。屏幕上的错误在这里:“Object.entries(swapis.result).map(([key, value]) => (" 你能分享一个codeandbox和repo吗?我尝试了我的代码,它可以工作 我刚刚在沙盒上做了。这是链接:codesandbox.io/s/crazy-minsky-cy9rg 您没有像预期的那样使用 nextjs。您可能会阅读文档。您创建了/data
页面来显示数据。您可以通过它的url访问:cy9rg.sse.codesandbox.io/data不建议在另一个页面中导入页面。
工作示例codesandbox.io/s/ecstatic-forest-m3mjf?file=/pages/index.tsx以上是关于使用 getStaticProps 获取数据 Next.js 和 Typescript的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NextJS 中为 getStaticProps 导入 API 路由?
如何从 getstaticprops 函数中的 Context API 获取数据?
如何从 getStaticProps 或 getStaticPaths 中的请求页面获取 slug?