Reactjs 查询空值返回graphql中的loading.load错误
我正在开发react应用程序。我要使用此查询:Reactjs 查询空值返回graphql中的loading.load错误,reactjs,graphql,Reactjs,Graphql,我正在开发react应用程序。我要使用此查询: const Newss = gql` query getNewssData { newss(ordered: true) { id title content event{ id title } } } `; 由以下代码执行: <Query query={Newss}> {({ loading, error, dat
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>
{({加载,错误,数据})=>{
如果(加载)返回加载新闻();
if(error)返回`error!${error.message}`;
返回data.news.map(news=>newssToRender(news));
}}
但它返回错误!因为有一些没有事件的新闻。即使事件可能为空,如何允许有时执行此查询
非常感谢你的帮助
伊扎亚
注:
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>
);
}
函数newssToRender(新闻){
如果(news.event==null){
返回NewsStoreUnderWithioutEvent(新闻);
}
返回(
);
}
该错误表示该字段为非空类型,这是GraphQL中包装另一类型的特殊类型。非null字段不能返回null,如果返回,将导致错误。这与一个字段声明一个Int
,然后返回一个String
——提供了错误的类型(无法强制),因此引发了一个错误没有什么区别
模式是服务器-客户机通信的契约。如果某个字段属于特定类型,服务器将有效地保证该字段始终为该类型。这限制了客户端的工作,因为它不需要在客户端对响应进行类型检查
不幸的是,您无能为力,因为这样的错误表示服务器端代码本身存在问题。如果事件有时为null是有意义的,那么该字段应该可以为null。否则,应该修复任何底层代码,以防止字段返回null。正确的做法是向API的作者提交一个bug(如果是你,也可以自己修复代码!)。错误表明该字段是非空类型,这是GraphQL中包装另一种类型的特殊类型。非null字段不能返回null,如果返回,将导致错误。这与一个字段声明一个
Int
,然后返回一个String
——提供了错误的类型(无法强制),因此引发了一个错误没有什么区别
模式是服务器-客户机通信的契约。如果某个字段属于特定类型,服务器将有效地保证该字段始终为该类型。这限制了客户端的工作,因为它不需要在客户端对响应进行类型检查
不幸的是,您无能为力,因为这样的错误表示服务器端代码本身存在问题。如果事件有时为null是有意义的,那么该字段应该可以为null。否则,应该修复任何底层代码,以防止字段返回null。正确的做法是向API作者提交一个bug(如果是你的话,也可以自己修复代码!)。这确实是一个网关问题:
event: (root, args, context) => context.loaders.event.load(root.event)
替换为:
event: (root, args, context) => root.event ? context.loaders.event.load(root.event) : null,
允许空值
谢谢你,丹尼尔这确实是一个网关问题:
event: (root, args, context) => context.loaders.event.load(root.event)
替换为:
event: (root, args, context) => root.event ? context.loaders.event.load(root.event) : null,
允许空值
谢谢你,丹尼尔谢谢你的回答。我现在真的很清楚了。我原以为存在schema.gql问题,但实际上它来自网关加载程序。谢谢您的回答。我现在真的很清楚了。我认为存在schema.gql问题,但实际上它来自网关加载程序。