中继无法协调连接上的边缘
Posted
技术标签:
【中文标题】中继无法协调连接上的边缘【英文标题】:Relay was unable to reconcile edges on a connection 【发布时间】:2016-07-16 19:05:42 【问题描述】:我正在尝试在应用程序中使用中继实现分页。在 react-bootstrap 表和分页中显示数据以导航页面。当我第一次点击页面时,它会加载第一页数据(执行根查询)。在分页(1、2、3 ..)的点击事件中,我向服务器请求下一页数据。正如预期的那样,根查询执行并获取数据但是 UI 上的数据没有得到更新.. 在浏览器控制台中我可以看到以下错误
警告:。这很可能发生在尝试处理服务器响应时,该响应包括缺少id
字段的节点的连接边缘。
点击分页后,我可以看到带有所需参数的 url 的变化,比如 pageNum=2 并且在页面刷新时它会显示新数据。但数据应该没有页面刷新。
【问题讨论】:
【参考方案1】:在您为 GraphQL 类型定义连接的服务器端 GraphQL 架构定义中,您定义了field :id, !types.ID
还是globalIdField
。
例如(在 javascript 中,但适用于其他语言)
var myObjectType = new GraphQLObjectType(
name: 'MyObject',
description: 'My Object',
fields: () => (
id: globalIdField('MyObject'),
...
)
)
var myObjectListType = new GraphQLObjectType(
name: 'MyObjectList',
description: 'List of My Objects',
fields: () => (
id: globalIdField('MyObjectList'),
denims:
type: myObjectConnection,
...
)
)
var connectionType: myObjectConnection =
connectionDefinitions(name: 'MyObject', nodeType: myObjectType);
可能与:Nested fragment data always the same in Relay
【讨论】:
感谢您的回复,但我的“myObjectType”和“myObjectListType”上有字段:id。对于每个页面请求,我还可以看到响应的数据,但没有更新 UI 上的反应表。 在您解析为/作为响应返回的 myObjectType 实例对象中,该实例对象是否具有:id
字段? GraphQL 将使用传递给 globalIdField
的类型(例如 MyObject)和实例对象的 :id
字段的组合来生成唯一的全局 ID。
是的实例对象也有 id 字段。例如,对于 myObjectType,我解析具有 id 属性和其他必需属性的 myObject 实例。仅供参考,对于每个页面,请求都会发送到服务器并获取该特定页面的数据。
你的myObjectListType
呢?您是如何在后端创建该对象的?它有:id
字段吗?您是否创建了nodeDefinitions
接口,使其知道如何处理myObjectListType
?另外,您是如何将 pageNum=2 传递给您的 GraphQL 服务器的?发布更多代码会有所帮助。
非常感谢您的提示。问题出在 myObjectListType 的实例上。id 在那里丢失了。再次感谢您的帮助.. :)以上是关于中继无法协调连接上的边缘的主要内容,如果未能解决你的问题,请参考以下文章