何时使用 `parent` 以及何时使用 `root` 作为 GraphQL-resolver 函数中的第一个参数
Posted
技术标签:
【中文标题】何时使用 `parent` 以及何时使用 `root` 作为 GraphQL-resolver 函数中的第一个参数【英文标题】:When to use `parent` and when to use `root` as first argument in a GraphQL-resolver function 【发布时间】:2019-04-02 18:02:19 【问题描述】:我已经看到了一些教程和示例,它们有时使用 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
【问题讨论】:
这些只是命名约定。这些只是参数名称。你的解析器总是用 4 个参数调用。您可以使用 even (alpha,beta,gamma,zeta) 或其他名称来调用它。 是的,但是有一些我应该遵循的指南,特别是对于 root/parent 吗?我想知道它是否有一些有价值的意图将它命名为这个或那个。 每个解析器调用中的根或有时父参数只是上一次调用的结果(如果没有另外指定,初始值为 null)。 【参考方案1】:这里没有既定的惯例。我见过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-resolver 函数中的第一个参数的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 GetXXX() 方法以及何时使用 Getter 属性
何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?