如何解决通过地图渲染数据 - 无法读取属性
我在呈现从 API 获取的一组数据时遇到问题,我想知道这是为什么。如果我注释掉我的 map 函数,我就可以 console.log 我的数据对象并通过开发工具遍历它。但是,一旦我将 map 函数重新实现到我的代码中,我就会不断收到“无法找到评论属性”的类型错误。那个怎么样?考虑到我能够更早地控制台记录对象?
index.js
import Head from 'next/head'
import Image from 'next/image'
import styles from '../styles/Home.module.css'
import Header from '../components/Header'
import {useQuery,gql} from '@apollo/client'
const REVIEWS = gql`
query GetReviews {
reviews {
title,body,rating,id
}
}
`
export default function Home() {
const {loading,error,data} = useQuery(REVIEWS)
console.log(data.reviews)
return (
<>
<Header/>
<div>{data.reviews.map(r => (
<div>{r.id}</div>
))}
</div>
</>
)
}
_app.js
import '../styles/globals.css'
import {
ApolloClient,InMemoryCache,ApolloProvider,} from "@apollo/client";
function MyApp({ Component,pageProps }) {
const client = new ApolloClient({
uri: 'http://localhost:1337/graphql',cache: new InMemoryCache()
})
return (
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
)
}
export default MyApp
解决方法
请确保您始终使用条件来检查数据是否存在,然后再开始在获取数据的情况下对其进行映射。
在您的示例中,一个简单的解决方案是:
return (
<>
<Header />
<div>
{data?.reviews.length ? data.reviews.map((r) => <div>{r.id}</div>) : null}
</div>
</>
);
我所做的是检查 data.reviews 是否未定义,以及它是否具有正长度 ( > 0 ),这是能够对其进行映射的要求。如果不满足此要求,则返回 null。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。