我正在努力应对Relay的一些奇怪行为。基本上我有一个像
这样的查询query{
user{
friends{
[Connection of friendType]
},
friend(id: [...]){
[gives the friendType]
}
}
}
所以有朋友的联系,也有可能通过id访问一个朋友(用一些额外的信息显示朋友个人资料)。连接工作正常,直到特定的朋友被显示配置文件的组件获取(这发生在使用RelayRenderer)。
朋友的抓取工作,它显示...很好。但之后,朋友数据不再出现在连接中,对象仍然存在,但我无法访问显示配置文件的组件提取的任何数据。
此外,即使配置文件中显示的数据与列表中的数据相同(即片段重合),配置文件组件也会再次获取该朋友。
我认为,这与Relay的强制封装有关。两个组件显示一个特定对象(朋友)的相同片段,但只允许实际获取数据的一个组件看到它。
这在我看来是违反直觉的,因为它使得缓存实际上无用,因为我必须在显示其中一个之后再次获取朋友的整个连接...
关于我在这里做错了什么的想法?
编辑:我一直在做一些研究,这就是我所看到的:节点数据只会丢失,如果它是片段的一部分,i。即如果我有
fragment on user{
friends { edges { node {
id,
name
}
}
在另一个地方
fragment on user {
friend(id: [...]) {
id,
name
}
}
然后查询第二个片段会破坏第一个片段,列表(使用第一个片段)不会获得对node.name的任何访问权限。另一方面,如果两个片段都使用嵌套
fragment on friend {name}
然后它有效。
然而,这非常繁琐,因为它意味着在单个文本(在某些情况下)的级别上拆分中继容器。