在我们的项目中,我们使用Apollo客户端将查询发送到GraphQL。奇怪的是,它将变量转换为对象的对象。
let variables = [{myField: "myVal"}];
graphql.mutate("mutate myFunction($data:[MyInputType]){
myFunction(myArg: $data){...blabla...}
}", variables);
当我运行变异并检查请求标头时,我看到我的变量被转换为对象的对象。
{"0": {"myField": "myVal"}}
此方法是否默认将变量强制为对象?是否可以使用GraphQL将对象数组作为参数发送?
答案 0 :(得分: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)
在所有这些情况下,传递给variables
的{{1}}的值仍然需要是一个对象:
mutate
在您的示例中,您仅定义了一个变量{
names: ['Bob', 'Susan'],
points: 12,
}
,您已经将它告诉GraphQL是data
的{{1}}。您无法将List
作为变量传递,因为您没有告诉GraphQL该变量存在。但是,如果MyInputType
是myField
上的一个字段,那么您的myField
只需看起来像这样:
MyInputType