0

在 relay/graphql 中,如何表达一个响应可以为空的查询。我现在有一个难题,我不能用空/空响应来响应,因为id中继需要字段(可能还有 graphql 模式中的其他不可为空的字段),并且我不能发送错误,因为它会阻止我的组件被渲染.

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

getSpouse(partnerID: string): Person

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

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

4

1 回答 1

3

中继核心团队的@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)
}
于 2016-07-12T16:42:17.400 回答