reactjs - 在graphql中查询空值返回loading.load错误
问题描述
我正在开发一个反应应用程序。我想使用这个查询:
const Newss = gql`
query getNewssData {
newss(ordered: true) {
id
title
content
event{
id
title
}
}
}
`;
由这个反应代码执行:
<Query query={Newss}>
{({ loading, error, data }) => {
if (loading) return LoadingNews();
if (error) return `Error! ${error.message}`;
return data.newss.map(news => newssToRender(news));
}}
</Query>
但它返回错误!因为有一些没有事件的消息。即使事件可能为空,有时如何允许执行此查询?
非常感谢您的帮助 !
居屋
笔记 :
function newssToRender(news) {
if (news.event === null) {
return newssToRenderWithoutEvent(news);
}
return (
<div>
<News
title={news.title}
content={news.content}
eventid={news.event.id}
eventTitle={news.event.title}
pictureSrc={news.picture}
/>
</div>
);
}
解决方案
该错误表明该字段是 Non-Null 类型,它是 GraphQL 中包装了另一种类型的特殊类型。非空字段不能返回空值,如果这样做会导致错误。Int
这与声明 an然后返回 a的字段没有什么不同String
——提供了错误的类型(并且无法强制)因此引发错误。
模式是服务器-客户端通信的契约。如果字段属于特定类型,则服务器有效地保证该字段将始终是该类型。这限制了客户端的工作,因为它消除了在客户端对响应进行类型检查的需要。
不幸的是,您无能为力,因为此类错误表示服务器端代码本身存在问题。如果事件有时为空是有意义的,那么该字段应该可以为空。否则,应修复任何底层代码以防止该字段返回 null。正确的做法是向 API 的作者提交错误(或者如果是您自己修复代码!)。
推荐阅读
- java - 赫罗库 | 云实施
- selenium - 我们在哪里可以找到 GeckoDriver 的 Selenium 版本兼容版本
- c# - 在两个 Web 应用程序之间共享身份验证(会话变量错误)
- apache-zookeeper - 我如何知道 Zookeeper 节点是否是容器节点?
- java - 为什么我的后期改造请求不起作用?
- java - 比较 Hibernate Criteria 中的两列
- gupshup - 如何在 http://enterprise.smsgupshup.com/ Api 中添加自定义模板?
- android - 复杂项目的RecyclerView滚动问题
- r - 如何在线点图中找到 y 值?
- php - 我只得到一个奇怪的行而不是 2 个正常的行