【问题标题】:Array of objects convert into object of objects when I use Apollo当我使用 Apollo 时,对象数组转换为对象对象
【发布时间】:2019-05-07 07:56:56
【问题描述】:

在我们的项目中,我们使用 Apollo 客户端向 GraphQL 发送查询。奇怪的是,它将变量转换为对象的对象。

let variables = [{myField: "myVal"}];
graphql.mutate("mutate myFunction($data:[MyInputType]){
    myFunction(myArg: $data){...blabla...}
}", variables);

当我运行突变并检查请求标头时,我看到我的变量被转换为对象的对象。

{"0": {"myField": "myVal"}}

此方法是否强制变量默认为对象?是否可以使用 GraphQL 将对象数组作为参数发送?

【问题讨论】:

    标签: javascript graphql apollo


    【解决方案1】:

    执行查询时,GraphQL 期望 variables 是一个对象,其中键是变量名,值是对应的变量值。文档中使用的每个变量(您发送的整个查询)都必须在文档的操作定义旁边声明。例如,如果您有一个名为 firstName 的变量是 String

    mutation SomeOperationName ($firstName: String) {
      # your mutation here
    }
    

    您可以包含任意数量的变量:

    mutation SomeOperationName ($firstName: String, $lastName: String, points: Int)
    

    变量也可以是列表:

    mutation SomeOperationName ($names: [String], points: Int)
    

    然而,在所有这些情况下,您传递给 mutatevariables 的值仍然需要是一个对象:

    {
      names: ['Bob', 'Susan'],
      points: 12,
    }
    

    在您的示例中,您只定义了一个变量 data,您告诉 GraphQL 是 ListMyInputType。您不能将 myField 作为变量传递,因为您没有告诉 GraphQL 变量存在。但是,如果myFieldMyInputType 上的一个字段,那么您的variables 只需如下所示:

    {
      data: [
        {
            myField: 'someValue'
        },
        {
            myField: 'someOtherValue'
        },
      ],
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 2016-03-11
      • 2022-01-20
      • 2017-01-14
      • 2019-07-11
      • 1970-01-01
      相关资源
      最近更新 更多