中继无法协调连接上的边缘

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 在那里丢失了。再次感谢您的帮助.. :)

以上是关于中继无法协调连接上的边缘的主要内容,如果未能解决你的问题,请参考以下文章

华硕路由器ac68u怎么做无线中继

将边缘插入中继连接的正确方法是啥?

Tomcat 连接池问题 - 无法在关闭的连接上调用方法

如何使用带有 Typescript 的泛型将中继(graphql)连接映射到边缘节点

我手机开了热点,电脑连接上了,但电脑显示没网

无法连接上 repo.windscribe.com:443 (8.7.198.45),连接超时