中继/ 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:可为空的响应或捕获查询错误的方法的主要内容,如果未能解决你的问题,请参考以下文章