哪些中继对象必须实现 `Node`?
Which relay objects must implement `Node`?
https://facebook.github.io/relay/graphql/objectidentification.htm 非常清楚 Node
是什么以及它的行为方式,但它没有指定哪些对象必须实现它,或者如果你的对象不实现会产生什么后果它。是否有一组功能不起作用?这些对象是否完全被忽略?并非现有规范中的所有对象(例如 pageInfo
)都实现了它,因此它显然不是普遍需要的,但 pageInfo
有点特殊。
考虑 Node
接口的另一种方式是实现它的对象是 可重新获取的 。 Refetchability 实际上意味着一个对象有一个 ID,我可以用它来识别对象并检索它;按照惯例,这些 ID 通常是不透明的,但会包含类型信息和该类型内的标识符(例如,字符串的 Base-64 编码,如 "Account:1234")。
中继将以两种方式利用可重新获取性:
- 在称为 "diffing" 的过程中,如果您已经拥有由 ID
QWNjb3VudDoxMjM0
标识的对象的一些数据(例如,name
和 address
字段) ,然后您导航到我们显示一些附加字段(location
、createdAt
)的视图,然后 Relay 可以进行最小查询 "refetches" 节点但仅请求缺少的字段。
- 相关地,Relay 将区分连接并使用
Node
界面来填充那些缺失的数据(例如:通过某种导航组合,您可能会在视图中获得某些项目的完整信息,但需要为范围内的某些项目填写 location
,或者您可能会通过突变修改连接中的项目)。因此,在基本分页中,Relay 通常最终会发出 first
+ after
查询来扩展连接,但如果您在真实应用程序中检查其网络流量,您还会看到它发出 node
查询连接中的项目。
所以,是的,pageInfo
没有实现 Node
,你是对的,这样做真的没有意义。
https://facebook.github.io/relay/graphql/objectidentification.htm 非常清楚 Node
是什么以及它的行为方式,但它没有指定哪些对象必须实现它,或者如果你的对象不实现会产生什么后果它。是否有一组功能不起作用?这些对象是否完全被忽略?并非现有规范中的所有对象(例如 pageInfo
)都实现了它,因此它显然不是普遍需要的,但 pageInfo
有点特殊。
考虑 Node
接口的另一种方式是实现它的对象是 可重新获取的 。 Refetchability 实际上意味着一个对象有一个 ID,我可以用它来识别对象并检索它;按照惯例,这些 ID 通常是不透明的,但会包含类型信息和该类型内的标识符(例如,字符串的 Base-64 编码,如 "Account:1234")。
中继将以两种方式利用可重新获取性:
- 在称为 "diffing" 的过程中,如果您已经拥有由 ID
QWNjb3VudDoxMjM0
标识的对象的一些数据(例如,name
和address
字段) ,然后您导航到我们显示一些附加字段(location
、createdAt
)的视图,然后 Relay 可以进行最小查询 "refetches" 节点但仅请求缺少的字段。 - 相关地,Relay 将区分连接并使用
Node
界面来填充那些缺失的数据(例如:通过某种导航组合,您可能会在视图中获得某些项目的完整信息,但需要为范围内的某些项目填写location
,或者您可能会通过突变修改连接中的项目)。因此,在基本分页中,Relay 通常最终会发出first
+after
查询来扩展连接,但如果您在真实应用程序中检查其网络流量,您还会看到它发出node
查询连接中的项目。
所以,是的,pageInfo
没有实现 Node
,你是对的,这样做真的没有意义。