Javascript 当我使用Apollo时,对象数组转换为对象对象数组

Javascript 当我使用Apollo时,对象数组转换为对象对象数组,javascript,graphql,apollo,Javascript,Graphql,Apollo,在我们的项目中,我们使用Apollo客户端向GraphQL发送查询。奇怪的是,它将变量转换为对象的对象 let variables = [{myField: "myVal"}]; graphql.mutate("mutate myFunction($data:[MyInputType]){ myFunction(myArg: $data){...blabla...} }", variables); 当我运行变异和检查请求头时,我看到我的变量被转换成对象的对象 {"0": {"myFie

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

let variables = [{myField: "myVal"}];
graphql.mutate("mutate myFunction($data:[MyInputType]){
    myFunction(myArg: $data){...blabla...}
}", variables);
当我运行变异和检查请求头时,我看到我的变量被转换成对象的对象

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

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

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

mutation SomeOperationName ($firstName: String) {
  # your mutation here
}
您可以包含任意数量的变量:

mutation SomeOperationName ($firstName: String, $lastName: String, points: Int)
变量也可以是列表:

mutation SomeOperationName ($names: [String], points: Int)
但是,在所有这些情况下,传递给
mutate
变量的值仍然需要是一个对象:

{
  names: ['Bob', 'Susan'],
  points: 12,
}
在您的示例中,您只定义了一个变量,
data
,您告诉GraphQL是
MyInputType
列表。您不能将
myField
作为变量传入,因为您没有告诉GraphQL该变量存在。但是,如果
myField
MyInputType
上的一个字段,那么您的
变量只需如下所示:

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