javascript - 当我使用 Apollo 时,对象数组转换为对象的对象

标签 javascript graphql apollo

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

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

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

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

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

最佳答案

执行查询时,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变量 值仍然需要是一个对象:

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

在您的示例中,您只定义了一个变量 data,您已告诉 GraphQL 是 MyInputTypeList 。您无法将 myField 作为变量传递,因为您尚未告诉 GraphQL 该变量存在。但是,如果 myFieldMyInputType 上的字段,那么您的变量 只需如下所示:

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

关于javascript - 当我使用 Apollo 时,对象数组转换为对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637531/

相关文章:

javascript - Apollo makeExecutableSchema 抛出错误 "Cannot read property ' 种“未定义”

android - GitHub GraphQl api v4 返回 "Cannot query field repository on type Query"

javascript - 如何使用 ZingChart 设置工具提示上的数字格式

javascript - React Web App 文件保存(建议)

typescript 错误 TS2304 : Cannot find name AsyncIterator even with esnext

javascript - 如何使用 Apollo 在 Nuxt 生成的动态页面中正确填充页面标题?

javascript - 失败后重新启动 Promise

javascript - React Native 中动画完成时触发函数?

apollo - `data` 在 apollo useMutation Promise 中未定义

javascript - VueJS 在渲染数据之前等待 Apollo