【问题标题】:How can I define type in gql query in Apollo Client?如何在 Apollo Client 的 gql 查询中定义类型?
【发布时间】:2020-06-07 02:49:39
【问题描述】:

我的 Apollo 服务器有以下定义。

input MinMax{
  min:Float
  max:Float
}
input ScreenerInput{
  fy:Int!
  quarter:Int!
  ltp:MinMax
  eps:MinMax
  pe:MinMax
  netWorth:MinMax
  paidUp:MinMax
  reserve:MinMax
  netProfit:MinMax
}

如何在 Apollo 客户端中定义 MinMax 类型以发送 MinMax 类型的变量。直到现在我只做标量类型,所以我的查询很简单。

我的查询类型是screeenedCompanies(criteria:ScreenerInput!):[ScreenedCompanies]

如果我像下面这样直接查询,它可以工作。

{
  screeenedCompanies(criteria:{
    fy:2075
    quarter:2
    eps:{
      min:30
      max:40
    }
  }){
    sector
    symbol
  }
}

我想要的是这样查询,以便可以更改变量

query getScreenedCompanies($criteria:<What type should be here ?>){  

{
  screeenedCompanies(criteria:$criteria){
    sector
    symbol
  }
}
}

在输入ScreenerInput 作为类型后,我的查询如下所示

query getScreenedCompanies($criteria:ScreenerInput!){  
  screeenedCompanies(criteria:$criteria){
    sector
    symbol
  }
}

我在 apolloplayground 中的变量如下所示

{
  "criteria": {
    "fy": 2075
    "quarter": 4
    "ltp": {
      "min": 345
      "max": 400
    }
  }
}

我收到以下错误

  "error": {
    "errors": [
      {
        "message": "Variable \"$criteria\" of required type \"ScreenerInput!\" was not provided."

【问题讨论】:

    标签: graphql apollo apollo-client


    【解决方案1】:

    它的工作方式与GQL 中的任何标量类型相同。只需使用与服务器上相同的输入名称定义它们(如MinMaxScreenerInput 在您的情况下)。你不需要在客户端描述它的形状,服务器会为你验证它:)

    如果需要参数,别忘了加上感叹号!

    【讨论】:

    • 您好,感谢您的回答。但我仍然无法让它发挥作用。我的query 类型是screeenedCompanies(criteria:ScreenerInput!):[ScreenedCompanies]。我如何从 apollo 客户端查询这个。MinMax 是我的情况不是必填字段,所以没有! 标记。
    • 但我仍然无法正常工作您遇到了什么错误,您使用的是什么查询?您可以更新您的问题以反映这一点
    • 感谢您的回复。我已经编辑了这个问题。请检查一下。
    • 我明白了。那么,您具体看到了什么错误?在查询中,您需要使用与服务器上相同的输入类型:ScreenerInput!
    • 谢谢。现在我想我已经接近正确但仍然出现上述错误。我已经编辑了这个问题。请检查一下。
    猜你喜欢
    • 2020-01-06
    • 2019-02-10
    • 2018-01-23
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2016-09-02
    相关资源
    最近更新 更多