何时使用 `parent` 以及何时使用 `root` 作为 GraphQL-resolver 函数中的第一个参数

mst*_*ing 1 javascript naming-conventions node.js graphql graphql-js

我看过一些教程和示例,它们有时使用parent有时使用root作为他们在 graphql 解析器中的第一个参数。

在什么情况下正确的命名是什么?为什么?

例如(nodejs):

signup: (root, args, context, info) => signup(root, args, context, info)
Run Code Online (Sandbox Code Playgroud)

对比

signup: (parent, args, context, info) => signup(parent, args, context, info)
Run Code Online (Sandbox Code Playgroud)

或在进行注册的函数中:

const signup(root, args, context, info) = {
    // do magic stuff
}
Run Code Online (Sandbox Code Playgroud)

对比

const signup(parent, args, context, info) = {
    // do magic stuff
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 5

这里没有既定的约定。我在不同的参考指南中看到了rootparentobj。在一天结束时,您可以随心所欲地调用函数参数——您的代码将发挥相同的作用。

也就是说,我通常使用该字段被部分解析的类型的名称。所以对于像这样的类型

type RoomRental {
  user: User
  date: Date
}
Run Code Online (Sandbox Code Playgroud)

解析器签名如下所示:

user: (roomRental, args, context, info) => {
  //
}
Run Code Online (Sandbox Code Playgroud)

我发现这使得在您(或队友)阅读代码时更容易推理您的解析器正在做什么。同样,这只是我的偏好,但您可能会发现它有助于使您的代码更易于理解。

为了完成,我还补充说 GraphQL.js 确实有一个可配置的root值。该值作为根级字段(即,类型为Queryor 之类的字段Mutation)的解析器中的第一个参数向下传递。通过根传递东西没有多大用处——你可能以这种方式传递的任何东西都应该进入你的context。但是,该root值是实现的一部分,这可能就是您看到许多示例root用作第一个参数的名称的原因。