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

时间:2016-07-09 17:42:15

标签: javascript graphql relayjs relay graphql-js

在relay / graphql中,如何表达响应可以为空的查询。我现在有一个困境,我无法响应空/ null响应,因为继电器需要id字段(并且可能是graphql架构中的其他非可空字段),我不能发送错误,因为它停止我的组件被渲染。

例如,假设我正在建立一个关系层次结构,并且有一个类似

的查询

getSpouse(partnerID: string): Person

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

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

1 个答案:

答案 0 :(得分:3)

接力核心团队的@josephsavona评论了一种方法。在 documentation

  

一种解决方法是使用可解析的自定义网络层   如果有任何数据(无论错误),RelayQueryRequest,和   如果没有数据和错误,则仅拒绝请求。

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

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