据我所知,当变量发生更改时,relay 依赖于 nodeDefiitions 进行查询。
看起来所有具有 id 字段的对象都应该是有效的节点。但是,如果我有这样的数据:
type User {
id: globalIdField('User'),
name: String,
folders: [ Folder ]
}
type Folder {
id: ???,
...
}
数据存储在基于文档的解决方案中,Folder 对象嵌套在 User 对象中。但是Folder对象被赋予了一个id,以便其他一些对象可以在用户的上下文中引用Folder对象。
如果Folder实现了nodeInterface,并使用了globalIdField,那么我需要找出一种从globalId获取Folder对象的方法,这意味着我可能必须扫描所有用户才能找到它,有一个数据映射允许我找到该对象,或规范化数据,以便文件夹位于自己的表中。 如果它没有实现nodeInterface,并且仅使用字符串作为id字段,那么当我尝试改变Folder对象上的某些字段时会发生什么?
最佳答案
这些对象拥有 id 通常很有用,即使数据库中直接没有真正的 id。例如,如果您想编写一个突变来重命名文件夹,那么最好有一个全局 ID 来引用该文件夹。当 UI 请求尚未加载的节点上的一些附加数据时,Relay 也会在内部使用它们。
为文件夹生成全局 ID 的一种方法是采用前缀并添加用户 ID 以及在用户内识别文件夹的方法,例如:
var folderID = ['folder', userID, folderID].join(':');
每当您想在服务器上解析此 ID 时,您都可以在 :
处进行拆分,通过查看第一部分来了解您想要加载一个文件夹,然后通过用户转到正确的文件夹.
关于relayjs - 何时使用 globalIdField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32686133/