【问题标题】:Apollo GraphQL variable argument nameApollo GraphQL 变量参数名称
【发布时间】:2020-07-08 05:15:39
【问题描述】:

背景:我已经在前端构建了一个带有单元格编辑的数据网格。每次编辑单元格中的字段时,它都会立即在服务器上更新。所以我认为在我的突变中只提交那个单一的字段是一个好习惯。这将减少网络流量大小,并且后端将更快地处理更新(当然,这都是非常高水平的优化)。

这意味着我使用 GraphQL 突变发送的参数是可变的。您可以通过 GraphQL 变量很好地注入参数值,但是什么是键的好方法?

为了可视化问题,这是我希望的:

mutation($id: 1, $field: "first_name", $value: "John") {
    updateClient(
        id: $id,
        $field: $value
    ) {
        id
    }
}

【问题讨论】:

  • 只需传递一个“更改”对象{key:value, key2:value2} - 遍历道具以构造数据库查询

标签: javascript graphql apollo


【解决方案1】:

不,很遗憾,查询中的参数名称不能是可变的。惯例是使用输入对象类型进行突变来规避这个问题:

type Mutation {
    updateClient(id: ID!, input: ClientInput!): Client
}
input ClientInput {
    a: String
    b: Number
    …
}

(而不是updateClient(id: ID!, a: String, b: Number, …)

使用此模式,您可以将 ClientInput 类型的对象作为参数传递给您的突变:

query(`mutation($id: ID!, $input: ClientInput!) {
    updateClient(id: $id, input: $input) {
        id
    }
}`, {id: 1, input: {["first_name"]: "John"}})

我真的希望在 GraphQL 中有某种参数传播语法来使这种嵌套变得不必要。

【讨论】:

  • 看起来已经很棒了!非常感谢,我从来没有想过这种方法,我不认为这太糟糕了:)
  • id 作为一个单独的参数,这没问题,但是如果你将id: ID! 也放在ClientInput 中,那么每个突变字段将只有一个名为@ 的参数987654328@,更明显是有问题。
猜你喜欢
  • 2017-02-07
  • 2018-03-02
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2021-12-17
  • 2021-04-17
  • 2019-03-27
相关资源
最近更新 更多