Graphql 将变量传递给具有复杂输入类型的查询

Graphql 将变量传递给具有复杂输入类型的查询,graphql,Graphql,根据graphQl文档: 在代码中传递参数时,通常最好避免 自己构造整个查询字符串。相反,您可以使用$ 语法在查询中定义变量,并将变量作为 单独的地图 在此上下文中,我尝试查询以下模式: const typeDefs = " input OrderInputData { date: String! time: String! frequency: String! extras: [Int!] mailAlarm: String phoneAlarm:

根据graphQl文档:

在代码中传递参数时,通常最好避免 自己构造整个查询字符串。相反,您可以使用$ 语法在查询中定义变量,并将变量作为 单独的地图

在此上下文中,我尝试查询以下模式:

const typeDefs = "
input OrderInputData {    
  date: String!
  time: String!
  frequency: String!
  extras: [Int!]
  mailAlarm: String
  phoneAlarm: String
  rating: Float
  comments: String
}

type Mutation {
  updateIntent(
    paymentIntentId: String, 
    setupIntentId: String, 
    pairIntentId: String,
    orderInput: OrderInputData): Boolean
}"
由于存在嵌套文档(OrderInputData),因此根据graphQl的更好实践构建查询有点困难,因为这种情况比文档中描述的更复杂。这就是我所知道的:

  const dummyData = {
    date: "11/11/2020",
    frequency: "One time",
    time: "6:17 PM",
    mailAlarm: "teste",
    phoneAlarm: "teste",
    extras: [1, 3, 7],
  };

const graphqlQuery = {
      query: `
      mutation updateIntent (
        $paymentIntentId: String, 
        $pairIntentId: String, 
        $orderInput: { 
          date: String!, 
          time: String!, 
          frequency: String!, 
          extras: [Int!], 
          mailAlarm: String, 
          phoneAlarm: String
        }) {
      updateIntent (
        paymentIntentId: $paymentIntentId, 
        pairIntentId: $pairIntentId, 
        orderInput: { 
          date: $date, 
          time: $time, 
          frequency: $frequency, 
          extras: $extras, 
          mailAlarm: $mailAlarm, 
          phoneAlarm: $phoneAlarm
        })
      }`,
      variables: {
        paymentIntentId: paymentIntentId, 
        pairIntentId: setupIntentId,
        "orderInput.date": dummyData.date, 
        "orderInput.time": dummyData.time, 
        "orderInput.frequency": dummyData.frequency, 
        "orderInput.extras": dummyData.extras, 
        "orderInput.mailAlarm": dummyData.mailAlarm, 
        "orderInput.phoneAlarm": dummyData.phoneAlarm
      }

我的错误是什么?

通常,为[API,BE]规范中定义的任何复杂输入类型准备[并作为变量传递]对象。

variables: {
    paymentIntentId: paymentIntentId, 
    pairIntentId: setupIntentId,
    orderInput: { date: orderInput.date,
    ...
。。。或者在这种情况下(
orderInput
前面定义的)只需

。。。或者当然(如果名称匹配)只是:

在查询/更改中:

$orderInput: OrderInputData

orderInput: $orderInput` 

Dzienkuje,工作得很好。之前定义的orderInput是虚拟数据。它将直接来自表单。我会在上面调整。
$orderInput: OrderInputData
orderInput: $orderInput`