在中继中,使用REQUIRED_CHILDREN
时如此:
return [{
type: 'REQUIRED_CHILDREN',
children: [
Relay.QL`
fragment on Payload {
myConnection (first: 50) {
edges {
node {
${fragment}
}
}
}
}
`
]
}]
并通过onSuccess
回调读取回复:
Relay.Store.commitUpdate(
new AboveMutation({ }), { onFailure, onSuccess }
)
响应将属性myConnection
转换为散列名称(即__myConnection652K
),这可能用于防止中继存储区内的连接/列表冲突。
但是,由于这是REQUIRED_CHILDREN
并且我手动阅读myConnection
,因此只是阻止了对它的访问。
使用onSuccess回调时有没有办法获取实际的属性名称?
答案 0 :(得分:0)
就像艾哈迈德写道:使用REQUIRED_CHILDREN
意味着你不会存储结果。其结果是提供给回调的数据是原始形状(几乎与服务器相同)并且data masking不适用。
尽管没有存储数据,但似乎没有理由(尽管核心团队成员的观点在这里肯定更合适)不将其转换为客户端样式形状。这是最新类型的突变,因此有可能意外省略了这种特征。查询转换为服务器样式形状是正常的,也可以进行相反的转换。但是直到现在还没有 - 在将数据保存到商店并更新组件道具的同时,进行了转换。目前大多数Relay团队都非常注重重写大部分实现,所以我不希望这个问题很快得到改善。
同样,Ahmed提出的将类型转换为GraphQLList
的解决方案似乎是最简单,最可靠的。如果由于任何原因您想要通过连接,可以选择将GraphQL fragment
作为children
提供(实际上它的解析形式存储在原始片段的__cachedFragment__
属性中)并遍历它获得所需字段的serializationKey
(例如__myConnection652K
)。