为了账号安全,请及时绑定邮箱和手机立即绑定

如何有条件地在 GraphQL 查询中包含过滤参数?

如何有条件地在 GraphQL 查询中包含过滤参数?

慕虎7371278 2023-07-14 10:10:58
我有以下 GraphQL 查询(使用 Apollo Client JS):query GetUsers($searchFilter: String) {    users(        first: 10,        filter: { search: $searchFilter }    ) {        nodes {            id            name        }    }}当我传递参数时,这很有效$searchFilter。但是,我希望这个$searchFilter参数是可选的。因此,当它出现时,null它不会应用过滤器。这看起来很简单,但 API 要求search不可为空。filter: { search: null }所以不允许传入。我想实现以下目标:query GetUsers($searchFilter: String) {    users(        first: 10,        filter: $searchFilter = null ? null : { search: $searchFilter }    ) {        nodes {            id            name        }    }}我如何有条件地包含filter参数?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

只需传递(整个“先前组成/准备”)值filter(在查询时定义)变量即可。保留此变量未定义使其成为可选的。


query GetUsers($filter: SomeFilterInputType) {

  users(

    first: 10, 

    filter: $filter ) {

filter为 [query] 变量传递值:


{

  filter: { search: 'sth'}

}

...其中SomeFilterInputType是 [ usersquery] arg 类型名称,它可以从 API 规范中读取,可在 graphiql/playground 文档中找到...或服务器代码/类型定义


可以使用查询变量在 graphiql/playground 中对其进行测试。


variables从 JavaScript 传递的是一个具有相同结构的对象,可以轻松地有条件地创建/修改。


在这种情况下SomeFilterInputType(类型名称后没有!标记)意味着它(filter变量)可以为空/未定义 -通常可选参数可以为空(不是必需的)。如果 API/BE 规范中需要某些参数,那么客户端中也必须需要它。


查看完整回答
反对 回复 2023-07-14
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信