尝试在GraphQLSegment中添加ID

seb*_*n_k 8 reactjs graphql relayjs

我的Relay/GraphQL片段包含两个不同的查询,这两个查询都返回相同类型的对象,并且两者之间返回的结果集之间经常存在一些重叠(这对我来说完全没问题).我在浏览器中看到以下警告:

Attempted to add an ID already in GraphQLSegment: client:client:15254944391:UmV2aWV3ZXI6MQ==
cra.dll.js:106483 Attempted to add noncontiguous index to GraphQLSegment: 52 to (0, 2)
cra.dll.js:106483 Attempted to add noncontiguous index to GraphQLSegment: 53 to (0, 2)
cra.dll.js:106483 Attempted to add noncontiguous index to GraphQLSegment: 54 to (0, 2)
cra.dll.js:106483 Attempted to add noncontiguous index to GraphQLSegment: 55 to (0, 2)
Run Code Online (Sandbox Code Playgroud)

有人可以确认这确实是由于我两次看到相同的Relay对象吗?如何使警告静音或至少进一步调试?

idk*_*kjs 0

不用看代码就可以知道,但你可能正在你的类型 2x 上运行你的nodeDefinition。如果您在顶级对象上定义了 globalIDField,如下所示:

let {nodeInterface, nodeField } = nodeDefinitions(
(globalId) => {
  let { type, id } = fromGlobalId(globalId)
  console.log('NodeDefinitions (globalId), id:', id)
  console.log('NodeDefinitions (globalId), type:', type)

  if (type === 'TopLevelObject') {
    return toplevelobject
  }
  return null
},
(obj) => {
  if (obj instanceof TopLevelObject) {
    return toplevelobjectType 
  } 
  return null 
}
Run Code Online (Sandbox Code Playgroud)

然后你应该像这样引用任何其他对象:

let itemType = new GraphQLObjectType({ name: 'Item', fields: () => ({ id: fromGlobalId('Item', obj => obj._id), // 或者,不能两者兼而有之.. id: { type: new GraphQLNonNull(GraphQLID), 解析: (obj) => obj._id }, 名称: { 类型: GraphQLString }, url: { 类型: GraphQLString }, 状态: { 类型: GraphQLString }, likesCount: { 类型: GraphQLInt }, createAt: { 类型: GraphQLString, 解析: ... } }), 接口: [nodeInterface] })

似乎都有效。如果您想分享您的代码,很乐意查看它。