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

Graphql GrahpQL:使用多个可选参数创建请求,graphql,apollo,graphql-js,apollo-client,Graphql,Apollo,Graphql Js,Apollo Client,使用apollo客户端和graphql标记我试图创建一个类似以下内容的请求: gql` { data( filter: ${options.filter} sort: ${options.sort} limit: ${options.limit} offset: ${options.offset} ) { name }

使用apollo客户端和graphql标记我试图创建一个类似以下内容的请求:

gql`
    {
        data(
            filter: ${options.filter}
            sort: ${options.sort}
            limit: ${options.limit}
            offset: ${options.offset}
        ) {
            name
        }
    }
`
但是,并非所有这些选项都始终设置,有时我可能只使用“限制”和“偏移”。但是如果我不设置它们,我会得到
预期的Int类型,发现未定义。


我是否应该预先循环我的options对象,并将任何
未定义的
值与
null
交换?还是有更好的方法来组织这个问题?

您应该避免在查询中使用占位符作为值,而是使用变量。因此,您的查询现在看起来像这样:

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>
或直接使用客户机:

query({query:MY_query,变量:{limit:10,offset:20}})


如果有任何变量未定义,它们将被忽略,您无需再做任何事情。

啊,谢谢,看起来我肯定遗漏了一些内容,所以我将继续阅读。我们目前不使用任何受支持的视图库(react、angular等),因此有时很难理解这些示例。HOC代表什么?对不起,我有一个坏的倾向,认为每个人都使用React:P HOC代表高阶组件,是一个React概念。我已经编辑了我的答案,以包括一个示例,说明如何在直接使用客户机时使用变量。有关更多详细信息,请参阅文档:谢谢,现在它更有意义了。Lol我花了很长时间才弄明白我也不必将类型添加到客户端,例如,我有一个服务器枚举数据排序,我正试图将枚举添加到我的查询中,这样我就可以将它添加到
查询MyQuery(…)
。。。最终为我指明了正确的方向
graphql(MY_QUERY, { options: (props) => ({ variables: { limit: 10, offset: 20 } }) }