何时在GraphQL-resolver函数中使用“ parent”以及何时将“ root”用作第一个参数

时间:2018-10-29 18:29:54

标签: javascript node.js graphql naming-conventions graphql-js

我已经看到了一些教程和示例,这些教程和示例有时在graphql解析器中使用parent,有时使用root作为第一个参数。

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

例如(nodejs):

signup: (root, args, context, info) => signup(root, args, context, info)

vs

signup: (parent, args, context, info) => signup(parent, args, context, info)

或在执行注册的功能中:

const signup(root, args, context, info) = {
    // do magic stuff
}

vs

const signup(parent, args, context, info) = {
    // do magic stuff
}

1 个答案:

答案 0 :(得分:2)

这里没有确定的约定。我已经看到rootparentobj在不同的参考指南中都使用过。在一天结束时,您可以随意调用函数参数-您的代码将发挥相同的作用。

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

的类型
type RoomRental {
  user: User
  date: Date
}

解析器签名如下:

user: (roomRental, args, context, info) => {
  //
}

我发现这使您(或队友)在阅读代码时更容易推断出解析器的工作方式。同样,这只是我的偏爱,但您可能会发现它有助于使您的代码更易消化。

为完成操作,我还要补充一点GraphQL.js确实具有可配置的root值。该值作为根级字段(即诸如QueryMutation之类的字段)的解析器中的第一个参数传递。通过根目录传递内容的实用性不高-以这种方式传递的任何内容都应该改为放在context中。但是,root值是实现的一部分,这也许就是为什么您看到很多示例都使用root作为第一个参数的名称的原因。