首页 > 解决方案 > 在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>
  );
}

标签: reactjsgraphql

解决方案


该错误表明该字段是 Non-Null 类型,它是 GraphQL 中包装了另一种类型的特殊类型。非空字段不能返回空值,如果这样做会导致错误。Int这与声明 an然后返回 a的字段没有什么不同String——提供了错误的类型(并且无法强制)因此引发错误。

模式是服务器-客户端通信的契约。如果字段属于特定类型,则服务器有效地保证该字段将始终是该类型。这限制了客户端的工作,因为它消除了在客户端对响应进行类型检查的需要。

不幸的是,您无能为力,因为此类错误表示服务器端代码本身存在问题。如果事件有时为空是有意义的,那么该字段应该可以为空。否则,应修复任何底层代码以防止该字段返回 null。正确的做法是向 API 的作者提交错误(或者如果是您自己修复代码!)。


推荐阅读