2

据我所知,在更改变量时,relay 依赖于 nodeDefitions 进行查询。

似乎所有具有 id 字段的对象都应该是有效节点。但是,如果我有这样的数据:

type User {
  id: globalIdField('User'),
  name: String,
  folders: [ Folder ]
}
type Folder {
  id: ???,
  ...
}

数据存储在基于文档的解决方案中,Folder 对象嵌套在 User 对象中。但是 Folder 对象被赋予了一个 id,以便其他一些对象可以在 User 的上下文中引用 Folder 对象。

如果 Folder 实现了 nodeInterface 并使用 globalIdField,那么我需要找到一种从 globalId 获取 Folder 对象的方法,这意味着我可能必须扫描所有用户才能找到它,拥有一个允许的数据映射我找到对象,或规范化数据,以便文件夹在自己的表中。如果它没有实现 nodeInterface,而只是使用字符串作为 id 字段,那么当我尝试改变 Folder 对象上的某些字段时会发生什么?

4

1 回答 1

2

这些对象拥有 id 通常很有用,即使您的数据库中没有直接的真实 id。例如,如果你想编写一个突变来重命名一个文件夹,最好有一个全局 ID 来引用这个文件夹。当 UI 在尚未加载的节点上请求一些额外数据时,Relay 也会在内部使用它们。

为文件夹生成全局 ID 的一种方法是使用前缀并添加用户 ID 以及在用户中识别文件夹的方法,例如:

var folderID = ['folder', userID, folderID].join(':');

每当你想在你的服务器上解析这个 id 时,你在 处拆分,:通过查看第一部分来查看你想要加载一个文件夹,然后通过用户转到正确的文件夹。

于 2015-09-21T03:04:15.480 回答