Разница в javascript между объектом конструктора функции и объектом внутри объекта - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь понять / понять, что инструктор схемы GraphQL использовал.

Итак, сначала он сделал что-то подобное

const BookType = new GraphQLObjectType({  
    name: 'Book', 

    fields: () => ({
        id: { type: GraphQLString},
        name: { type: GraphQLString},
        genre: { type: GraphQLString }
    })
})

Здесь он упомянул, что причина полей должна быть функцией, потому что позже, когда у нас есть множественный тип, и они имеют ссылку надруг друга.тогда, если мы не обернем его в функцию, один тип не будет знать, какие другие типы (более поздние)

А потом, когда он делал RootQuery , он делал что-то подобное

const RootQuery = new GraphQLObjectType({
    name: "RootQueryType",
    fields: {
        book: {
          type: BookType, 
          args: { id: { type: GraphQLString }},
          resolve(parent, args){
           args.id
            }
         }
      }
})

Здесь он сделал fields: { вместо fields: () => ({, для чего он дал следующую причину

Нам не нужно оборачивать это как поле выше, потому что мы нене нужно так много беспокоиться о порядке внутри корня. Запрос

[Вопрос:] Я не могу понять его объяснение, поэтому я искал кого-то, кто объяснит мне, почему он это сделалfields: { вместо fields: () => ({ это?

1 Ответ

0 голосов
/ 15 октября 2018

Вероятно, это связано с тем, что внутри вашего RootQueryType полевая книга не содержит ссылок на какие-либо из ваших объявленных типов, скажем AuthorType.Таким образом, ваша полевая книга зависит только от BookType или любых других объектов GraphQLObject, которые вы, возможно, импортировали сверху.То же самое касается автора поля.Внутри него не должно быть никаких ссылок на BookType.

Однако в случае ваших пользовательских типов (BookType или AuthorType) они могут содержать ссылки друг на друга и, следовательно, они зависят друг от друга.

Поэтому при определении этих пользовательских типов ваши поля должны быть заключены в функцию.Но это не обязательно, когда дело доходит до RootQuery.

Если вы хотите узнать больше об этом.Посмотрите на концепцию подъема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...