reactjs - 无法映射 React 中的查询
问题描述
我使用 Apollo 和 React 来映射查询,但得到一个 TypeError:无法读取未定义的属性“映射”。
我不知道道具的传递是问题还是它自己的查询......
我知道查询是由片段组成的,但改变它并不能解决错误。
这是代码:
应用程序.js
import React from 'react';
import './App.css';
import { Query } from 'react-apollo'
import { gql } from 'apollo-boost'
import ListPosts from './components/ListPosts'
function App() {
return (
<Query query={GET_POSTS_QUERY}>
{(data, loading, error) => {
if (loading) return <div>loading</div>
if (error) return <div>error</div>
return <ListPosts posts={data.allPosts} />
}}
</Query>
)
}
const GET_POSTS_QUERY = gql`
{
allPosts {
... on PostType {
title
createdAt
content
postImage
postedBy {
username
}
}
... on Post2Type {
title
createdAt
content
postImage
postedBy {
username
}
}
}
}
`
export default App;
ListPosts.js
import React from "react";
const ListPosts = ({ posts }) => (
<div>
{posts.map(post => (
<div key={post.id}>
<h1>{post.title}</h1>
</div>
))}
</div>
)
export default ListPosts;
有关更多上下文,这里是 JSON 中的响应
{
"data": {
"allPosts": [
{
"title": "vesti",
"createdAt": "2020-04-05T12:37:09.451520+00:00",
"content": "<p><strong>asdasda</strong></p>",
"postImage": "post/logo.png",
"postedBy": {
"username": "filip"
}
},
{
"title": "asds",
"createdAt": "2020-04-05T17:44:11.291829+00:00",
"content": "<p>asdasd</p>",
"postImage": "",
"postedBy": {
"username": "filip"
}
}
]
谢谢!
解决方案
Query
渲染道具功能
children
传递给prop的 render prop 函数使用具有以下属性Query
的对象 ( ) 调用。QueryResult
该对象包含您的查询结果,以及一些用于重新获取、动态轮询和分页的有用功能。
换句话说,render prop 是一个带有你需要的属性的 props 对象。该组件也只传递了一个参数。
整个props
被分配给一个名为 的变量data
,并且因为loading
和error
是未定义的,即错误的,这些条件测试失败并且您尝试呈现帖子。现在,data.allPosts
或者真的props.allPosts
不存在。
使用对象解构,您可以访问data
、loading
和error
props。
function App() {
return (
<Query query={GET_POSTS_QUERY}>
{({ data, loading, error }) => {
if (loading) return <div>loading</div>
if (error) return <div>error</div>
return <ListPosts posts={data.allPosts} />
}}
</Query>
)
}
推荐阅读
- azure-container-service - Azure VM 磁盘附件数太低。这个限制可以提高吗?
- delphi - 如何枚举 TCategoryPanel 持有的所有控件?
- javascript - 我如何获得嵌套对象的键 = used For .... in?
- android - 如何在 WorkManger 系统范围内注册定期工作请求一次(即在引导或安装之后)
- python - 如果 row[index] == "String" python,则将行写入新 csv
- c - 在 Apache 服务器上放置带有摘要身份验证的 webdav 的 Curl c 示例
- python - 如何从手部图像中获取特征向量
- camera - 子类 QAbstractCameraController PyQt
- lisp - lisp中的字符串加法赋值
- ios - 使用 Swift 和 UITableview 禁用移动最后一行