重新获取后,中继节点丢失

时间:2016-11-24 13:06:36

标签: relay

我正在努力应对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}

然后它有效。

然而,这非常繁琐,因为它意味着在单个文本(在某些情况下)的级别上拆分中继容器。

0 个答案:

没有答案