在中继中,当像这样使用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回调时,有没有办法获得实际的属性名称?
发布于 2017-01-23 06:32:23
正如艾哈迈德所写的:使用REQUIRED_CHILDREN意味着你不会存储结果。其结果是,提供给回调的数据是原始形式(几乎与来自服务器的数据一样),并且data masking不适用。
尽管没有存储数据,但似乎没有理由不将其转换为客户端样式的形状(尽管核心团队成员的意见在这里肯定更合适)。这是最新类型的突变,因此有可能意外地忽略了这种特征。这是正常的,查询被转换为服务器样式的形状,也可能发生相反的转换。然而,到目前为止还不需要它-在将数据保存到存储和更新组件属性的同时,进行了转换。目前大多数Relay团队都高度专注于重写大部分实现,所以我认为这个问题不会很快得到改善。
因此,Ahmed提出的将GraphQLList类型转换为的解决方案似乎是最简单和最可靠的。如果出于任何原因您想要备用连接,有一个选项可以采用作为children提供GraphQL fragment (实际上它的解析形式存储在原始片段的__cachedFragment__属性中),并遍历它以获得所需字段的serializationKey (例如__myConnection652K)。
https://stackoverflow.com/questions/41670902
复制相似问题