我们正在探索Relay Modern中的一些未记录的api,到目前为止,我们发现从中继存储中获取数据以便在应用程序中使用的最佳方法是使用从a派生的选择器调用environment.lookup。 graphql查询。
发生这种情况是因为看起来RecordSource.get方法从存储中返回对象,但是没有获取嵌套在它下面的节点的任何数据。有没有更好的方法来获取对象和所有连接的节点?我们的用例是使用applyOptimisticUpdate来更新Relay的商店,以便在保存在我们的管理应用程序之前所做的更改对于请求该数据的所有组件都是可见的。因此,一旦我们完成了这些更改,我们想重新查询中继存储以获取记录的当前状态,清除它以实现真正的突变,并将更新的有效负载发送到服务器。
任何见解都将受到赞赏,我将向Relay添加文档(如果需要的话)。
答案 0 :(得分:0)
Relay公开commitLocalUpdate
函数,该函数将环境和更新程序函数作为参数。更新程序的工作方式与您在突变中使用的方式相同 - 它接收商店的代理,您可以修改并返回。您可以使用此函数的主体从商店读取数据并发出所需的任何副作用。
虽然感觉有点像滥用API,但这可能是更正确的方法。