何时使用 `parent` 以及何时使用 `root` 作为 GraphQL 解析器函数中的第一个参数
When to use `parent` and when to use `root` as first argument in a GraphQL-resolver function
我看过一些教程和示例,他们有时使用 parent
,有时使用 root
作为 graphql 解析器中的第一个参数。
在什么情况下正确的命名是什么?为什么?
例如(nodejs):
signup: (root, args, context, info) => signup(root, args, context, info)
对
signup: (parent, args, context, info) => signup(parent, args, context, info)
或在执行注册的函数中:
const signup(root, args, context, info) = {
// do magic stuff
}
对
const signup(parent, args, context, info) = {
// do magic stuff
}
这里没有既定的约定。我看到 root
、parent
和 obj
都用于不同的参考指南。归根结底,您可以随心所欲地调用函数参数——您的代码将发挥相同的作用。
就是说,我通常使用在其中解析字段的类型的名称。所以对于像
这样的类型
type RoomRental {
user: User
date: Date
}
解析器签名如下所示:
user: (roomRental, args, context, info) => {
//
}
我发现当您(或队友)阅读代码时,这可以更容易地推断您的解析器在做什么。同样,这只是我的偏好,但您可能会发现它有助于使您的代码更易于理解。
为了完成,我还要补充一点 GraphQL.js 确实有一个可配置的 root
值。该值作为第一个参数传递给根级字段(即 Query
或 Mutation
等类型的字段)的解析器。通过根传递东西没有太多用处——任何你可能以这种方式传递的东西都应该放在你的 context
中。但是,root
值是实现的一部分,这可能就是为什么您会看到许多示例使用 root
作为第一个参数的名称的原因。
我看过一些教程和示例,他们有时使用 parent
,有时使用 root
作为 graphql 解析器中的第一个参数。
在什么情况下正确的命名是什么?为什么?
例如(nodejs):
signup: (root, args, context, info) => signup(root, args, context, info)
对
signup: (parent, args, context, info) => signup(parent, args, context, info)
或在执行注册的函数中:
const signup(root, args, context, info) = {
// do magic stuff
}
对
const signup(parent, args, context, info) = {
// do magic stuff
}
这里没有既定的约定。我看到 root
、parent
和 obj
都用于不同的参考指南。归根结底,您可以随心所欲地调用函数参数——您的代码将发挥相同的作用。
就是说,我通常使用在其中解析字段的类型的名称。所以对于像
这样的类型type RoomRental {
user: User
date: Date
}
解析器签名如下所示:
user: (roomRental, args, context, info) => {
//
}
我发现当您(或队友)阅读代码时,这可以更容易地推断您的解析器在做什么。同样,这只是我的偏好,但您可能会发现它有助于使您的代码更易于理解。
为了完成,我还要补充一点 GraphQL.js 确实有一个可配置的 root
值。该值作为第一个参数传递给根级字段(即 Query
或 Mutation
等类型的字段)的解析器。通过根传递东西没有太多用处——任何你可能以这种方式传递的东西都应该放在你的 context
中。但是,root
值是实现的一部分,这可能就是为什么您会看到许多示例使用 root
作为第一个参数的名称的原因。