relayjs - 何时使用 globalIdField

标签 relayjs

据我所知,当变量发生更改时,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/

相关文章:

graphql - GraphQL 中的查看器字段是什么意思?

webpack - babelRelayPlugin、transform-runtime、passPerPreset 是做什么的? (babel+webpack配置)

javascript - 如何从突变中获取新对象的 ID?

reactjs - 在 Relay Modern 中处理身份验证

javascript - 将状态传递给 Relay 中的 getVaribles 突变

android - React-native + Relay.js 的稳定构建

react-native - 无法在React Native上使用Relay工作

reactjs - 递归数据和组件,稍后获取会抛出错误

relayjs - 无法设置未定义的属性 'clientMutationId'

javascript - 如何从 GraphQLSchema javascript 对象获取 .graphql 文件?