我正在关注React + Relay + GraphQL @ https://facebook.github.io/relay/docs/tutorial.html
的教程我对什么接口感到困惑:[nodeInterface]在GraphQL对象定义中做了什么。
答案 0 :(得分:7)
this.props.relay.forceFetch()
仅由GraphQL使用,以便重新获取。
在以下任何一种情况下都会重新获取:
this.props.relay.setVariable(...)
,如果程序员认为服务器端的数据可能因其他外部原因而发生更改,则通常会发生这种情况nodeInterface
,这需要更改最初提取的数据。在重新获取期间,GraphQL使用(全局)节点ID调用nodeInterface
,nodeInterface
需要检索与该节点ID关联的服务器端对象。使用该服务器端对象,GraphQL服务器可以返回客户端所需的其他/变体数据。
因此,如果永远不会重新创建初始对象数据,则永远不需要节点ID。
有关详细信息,请参阅:https://medium.com/@khor/relay-graphql-de-mystifying-node-id-38757121b9c
var {nodeInterface, nodeField} = nodeDefinitions(
(globalId) => {
var {type, id} = fromGlobalId(globalId);
if (type === 'ClassA') {
// Get ClassA type of instance with id
// E.g.,
return ClassA.find_by_id(id)
} else if (type === 'ClassB') {
return ClassB.find_by_id(id)
}
...
}
)
执行节点ID到服务器端对象解析,因此它总是看起来像:
globalIdField
由于需要重新获取的GraphQL类型需要Node ID,因此在GraphQL架构中需要:
interface : [nodeInterface]
关键字var ClassAType = new GraphQLObjectType({
name: 'ClassA',
description: 'A',
fields: () => ({
id: globalIdField('ClassA'),
... other fields ...
}),
interfaces: [nodeInterface],
});
因此:
{{1}}
答案 1 :(得分:5)
对于符合Relay标准的GraphQL服务器,具有全局ID的对象称为Node
,任何node
都可以通过查询重新提取
{
node: (id: "some global id") {
id,
... on SomeType {
someField
}
}
}
Node
接口用于GraphGL架构,可帮助您定义具有全局ID的Type。