[英]javascript difference between function constructor object and an object inside object
我正在嘗試理解/理解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: () => ({
這?
這可能是因為在RootQueryType中,該字段簿不包含任何對您的自定義聲明類型的引用,例如AuthorType。 因此,您的現場書僅取決於BookType或您可能已在頂部導入的任何其他GraphQLObjects。 現場作者也是如此。 其中不應包含BookType的任何引用。
但是,對於您的自定義類型(BookType或AuthorType),它們可能包含彼此的引用,因此它們彼此依賴。
因此,在定義這些自定義類型時,您的字段需要包裝在函數中。 但這並不是RootQuery的必要條件。
如果您想了解更多。 查找提升的概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.