我正在尝试理解/理解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时,这不是必需的。
如果您想了解更多有关它的信息。查找吊装的概念。