如何在 Apollo Client 的 gql 查询中定义类型?

Posted

技术标签:

【中文标题】如何在 Apollo Client 的 gql 查询中定义类型?【英文标题】:How can I define type in gql query in Apollo Client? 【发布时间】: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."

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

以上是关于如何在 Apollo Client 的 gql 查询中定义类型?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Client GQL 查询的笑话测试

如何使用 GQL 从 React 前端的 Apollo 客户端获取错误

@apollo/client 反应钩子 useQuery() 数据未定义

useQuery 返回未定义,但在 gql 操场上返回数据

GraphQL Apollo 客户端 (PhpStorm) 中的格式/Prettyprint gql `template strings`

@Nuxt/Apollo 如何从 gql 查询中删除“__typeName”