【问题标题】:How to properly create the Id field on a graphql to be relay compliant?如何在 graphql 上正确创建 Id 字段以符合中继标准?
【发布时间】:2017-08-18 13:02:34
【问题描述】:

我正在关注relay+graphql 教程,但我对这段代码感到困惑:

const GraphQLTodo = new GraphQLObjectType({
  name: 'Todo',
  fields: {
    id: globalIdField('Todo'),
    text: {
      type: GraphQLString,
      resolve: (obj) => obj.text, 
    },
    complete: {
      type: GraphQLBoolean,
      resolve: (obj) => obj.complete,
    },
  },
  interfaces: [nodeInterface],
});

关于文本和完整字段的解析,obj来自哪里?是查询中的 obj 参数吗?还有,我如何从查询中解析 id ?难道我不必解决它?例如,这是 id 字段代码:

id: {
  id: globalIdField('Todo'),
  resolve: (obj) => obj.id, 
}

上面的代码会起作用吗?它不是多余的吗?如何正确创建 Id 字段以符合中继标准?

【问题讨论】:

    标签: graphql relayjs relay graphql-js


    【解决方案1】:

    obj 是记录本身,通常是您从持久存储中获得的任何格式。在本例中,它是一个Todo 对象,至少具有两个属性:textcomplete。这使得解析函数变得微不足道。存在解析函数,因此您可以执行更复杂的操作,例如:

    fullName: {
      type: GraphQLString,
      resolve: (obj) => obj.firstName + ' ' + obj.surname,
    }
    

    对于符合 Relay 的 ID,我认为您无需执行任何操作。 globalIdField 帮你搞定。

    【讨论】:

    • 持久存储是什么意思?数据库?
    • 是的,数据库(SQL 或其他)通常是存储数据的地方。在一些 GraphQL 教程中,我看到它被简化为没有持久性的内存数据结构。不过,这通常只是对教程的简化。
    • 感谢您的时间和解释,帮助很大。
    猜你喜欢
    • 2018-01-18
    • 2011-01-28
    • 2021-12-11
    • 2020-09-23
    • 2015-11-17
    • 2022-08-05
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多