中继/ graphql:可为空的响应或捕获查询错误的方法

Posted

技术标签:

【中文标题】中继/ graphql:可为空的响应或捕获查询错误的方法【英文标题】:relay/ graphql: nullable response or a way to catch query error 【发布时间】:2016-11-12 01:54:03 【问题描述】:

在relay/graphql中,如何表达一个响应可以为空的查询。我现在陷入两难境地,我无法以空/空响应响应,因为中继需要 id 字段(可能还有 graphql 架构中的其他不可为空的字段),并且我无法发送错误,因为它会停止我的正在渲染的组件。

例如,假设我正在对关系层次结构进行建模并且有一个类似的查询

getSpouse(partnerID: string): Person

这对某些人来说可能是空的。因此,我要么使用 null Person 对象进行响应(我认为中继不太可能,因为 Person 可能具有包括 globalID 在内的不可为空的字段),或者发送错误。可以发送错误,但我不确定如何捕获此错误并继续渲染中继容器。我知道在发生突变时很容易出错,但是查询是由中继容器处理的,并且看不到一个接口来获取错误并继续加载组件。

有没有办法在 Relay 容器中捕获查询错误或将其传递给我的组件?

【问题讨论】:

你是怎么解决的? 【参考方案1】:

中继核心团队的@josephsavona 评论了一种方法来做到这一点。在 https://github.com/facebook/relay/issues/487#issuecomment-232102389

一种解决方法是使用自定义网络层来解决 RelayQueryRequest 如果有任何数据(不管错误),以及 只有在没有数据和错误的情况下才会拒绝请求。

编辑:根据评论进行详细说明。

import  DefaultNetworkLayer  from 'react-relay';
export default class RelayNetworkLayer extends DefaultNetworkLayer 
  // override whichever methods (like sendMutation, sendQueries)

【讨论】:

能否详细说明您是如何扩展网络层的?

以上是关于中继/ graphql:可为空的响应或捕获查询错误的方法的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 查询返回错误“不能为不可为空的字段返回 null”

在两个可为空的 FK 之间添加 SQL XOR 约束

总和可为空的 Linq 查询

XmlConvert 和可为空的结果?

将列更改为可为空的查询不起作用[重复]

.NET Dapper 可为空的强制转换错误