Как правильно создать поле Id в graphql, чтобы оно соответствовало реле?

Я следую учебному пособию по реле + 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 из запроса? а также, как мне разрешить id из запроса? я не должен решить это? например, это код поля id:

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

Будет ли приведенный выше код работать и не будет ли он излишним? как мне правильно создать поле Id, чтобы оно соответствовало реле?


person gpbaculio    schedule 25.03.2017    source источник


Ответы (1)


obj — это сама запись, обычно в любом формате, который вы получаете из своего постоянного хранилища. В данном случае это объект Todo с как минимум двумя свойствами: text и complete. Это делает функции разрешения тривиальными. Существуют функции разрешения, поэтому вы можете делать более сложные вещи, такие как следующие:

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

Для идентификатора, совместимого с реле, я не думаю, что вам нужно что-то делать. globalIdField сделает это за вас.

person dmnd    schedule 25.03.2017
comment
что вы подразумеваете под постоянным хранилищем? база данных? - person gpbaculio; 26.03.2017
comment
Да, база данных (SQL или что-то другое) обычно является местом хранения данных. В некоторых руководствах по GraphQL я видел упрощенную структуру данных в памяти без сохранения. Однако обычно это просто упрощение для учебника. - person dmnd; 26.03.2017
comment
Спасибо за ваше время и объяснение, очень помогло. - person gpbaculio; 26.03.2017