当我使用 Apollo 时,对象数组转换为对象对象
Posted
技术标签:
【中文标题】当我使用 Apollo 时,对象数组转换为对象对象【英文标题】:Array of objects convert into object of objects when I use 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 将对象数组作为参数发送?
【问题讨论】:
【参考方案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)
然而,在所有这些情况下,您传递给 mutate
的 variables
的值仍然需要是一个对象:
names: ['Bob', 'Susan'],
points: 12,
在您的示例中,您只定义了一个变量 data
,您告诉 GraphQL 是 List
的 MyInputType
。您不能将 myField
作为变量传递,因为您没有告诉 GraphQL 变量存在。但是,如果myField
是MyInputType
上的一个字段,那么您的variables
只需如下所示:
data: [
myField: 'someValue'
,
myField: 'someOtherValue'
,
],
【讨论】:
以上是关于当我使用 Apollo 时,对象数组转换为对象对象的主要内容,如果未能解决你的问题,请参考以下文章