中继:获取递归数据返回 null
Posted
技术标签:
【中文标题】中继:获取递归数据返回 null【英文标题】:Relay: fetch for recursive data returns null 【发布时间】:2016-04-25 06:36:54 【问题描述】:我有一个要获取和显示的递归数据结构。我有一个图形 ql 类型如下:
human
name,
children: [human]
现在我想增量获取数据,因此用于响应类 HumanList 和 HumanItem,我只在单击项目时使用中继来获取子项。在我的实际代码中继中,在非常点击时给孩子一个空值,即在渲染第一组孩子时。我在中继操场上尝试了测试代码,发现了类似的问题。 Here 是要点的链接。 Playground.js 包含代码部分,Playground.gql.js 包含架构部分。单击每个数字在其下打开子项。在 3 或 4 级之后,它开始显示Found children as null
。对我来说,它发生在1.1.2.2
。如果您没有发生这种情况,请尝试在 SCHEMA 代码中添加更多级别,并且会弹出错误。
我已经检查过中继问题 #246 和 #536,但都没有帮助。
非常欢迎任何帮助。
【问题讨论】:
我从要点中创建了一个 Relay Playground - 只需复制粘贴代码和模式文件 - 它完全按预期工作,当单击父名称时,子项会扩展。你能直接链接到一个破碎的操场吗?这将有助于调试。 @JoeSavona 在接力操场上继续点击每个数字,直到你最终向下,你会发现消息 Found children as null。实际上,该消息是错误。如果您检查 graphql 代码并检查层次结构,那么您会发现甚至下面还有更多的孩子。如果您仍然无法跟踪错误,请尝试在 graphql 代码中增加子项,它会失败。这对我来说也是一样的,最初工作到 2 级,但后来又失败了。 @JoeSavona 我更新了要点和问题以更好地理解问题。 【参考方案1】:这是一个错误。给定一个复数字段,当需要查询新数据时,我们会将存储中的内容与应用程序想要的内容进行比较。错误是我们会假设复数字段的 所有 记录在存储中具有相同的形状,并且只使用任何复数字段中的第一个存储记录来进行比较。在您的情况下,这当然不是真的,其中复数字段中的某些记录可能会扩展,而某些记录可能会折叠。
这已作为https://github.com/facebook/relay/issues/1243 的一部分得到修复,并将在 Relay 0.9.1 之后的版本中发布。
【讨论】:
以上是关于中继:获取递归数据返回 null的主要内容,如果未能解决你的问题,请参考以下文章