GraphQL:使用多个可选参数创建请求

Posted

技术标签:

【中文标题】GraphQL:使用多个可选参数创建请求【英文标题】:GrahpQL: Create requests with multiple optional arguments 【发布时间】:2018-10-18 22:20:50 【问题描述】:

使用apollo-clientgraphql-tag 我正在尝试创建一个类似的请求:

gql`
    
        data(
            filter: $options.filter
            sort: $options.sort
            limit: $options.limit
            offset: $options.offset
        ) 
            name
        
    
`

但并非所有这些选项都始终设置,有时我可能只使用限制和偏移。但如果我不设置它们,我会得到Expected type Int, found undefined.

我是否应该事先遍历我的选项对象并将任何undefined 值与null 交换?或者有没有更好的方法来构建它?

【问题讨论】:

【参考方案1】:

您应该避免在查询中对值使用占位符,而应使用变量。所以你的查询现在看起来像这样:

const MY_QUERY = gql`
  query MyQuery($filter: String, $sort: String, $limit: Int, $offset: Int) 
    data (
      filter: $filter
      sort: $sort
      limit: $limit
      offset: $offset
    ) 
      name
    
  
`

注意:您为变量定义的类型需要与您的过滤器、排序、限制和偏移参数的架构相匹配。

现在您可以在渲染Query 组件时传入变量:

<Query query=MY_QUERY variables= limit: 10, offset: 20 >
  ( loading, error, data ) => 
    // ...
  
</Query>

或者,使用 HOC:

graphql(MY_QUERY,  options: (props) => ( variables:  limit: 10, offset: 20  ) 

或者直接使用客户端:

client.query( query: MY_QUERY, variables: limit: 10, offset: 20 )

如果任何变量未定义,它们将被忽略,而您无需执行任何其他操作。

【讨论】:

啊,谢谢,看起来我确实错过了一些东西,所以会去读更多的东西。我们目前不使用任何受支持的视图库(react、angular 等),因此有时很难弄清楚这些示例。 HOC 代表什么? 对不起,我有一种不好的倾向,认为每个人都使用 React :P HOC 代表高阶组件,是一个 React 概念。我已经编辑了我的答案,包括一个如何在直接使用客户端时使用变量的示例。有关详细信息,请参阅文档:apollographql.com/docs/react/api/… 谢谢,现在更有意义了。大声笑,我花了很长时间才弄清楚我不必也将类型添加到客户端,例如我有一个服务器枚举 DataSort,我试图将枚举添加到我的查询中,这样我就可以将它添加到 query MyQuery(...)... 最终 github.com/apollographql/apollo-client/issues/636 为我指明了正确的方向

以上是关于GraphQL:使用多个可选参数创建请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用可选参数创建端点? (节点、快递、MongoDB)

将多个参数从控制器传递到工厂服务进行 REST 调用并返回(可选)数据

如何使用 JavaScript 创建具有多个可选参数的搜索?

在 GraphQL .NET 中,如何指定查询可以采用可选参数?

SQL - 创建具有多个可选参数的存储过程

ASP.NET MVC 传递多个可选参数 field=value