[英]How to conditionally include an argument in a GraphQL query?
我有以下 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
参数?
只需为filter
(在查询时定义)变量传递(整个“早先组合/准备好”)值。 未定义此变量使其成为可选的。
query GetUsers($filter: SomeFilterInputType) {
users(
first: 10,
filter: $filter ) {
在 [query] 变量中传递filter
值:
{
filter: { search: 'sth'}
}
...其中SomeFilterInputType
是 [ users
查询] arg 类型名称,它可以从 API 规范中读取,可在 graphiql/playground 文档...或服务器代码/类型定义
可以使用 QUERY VARIABLES 在 graphiql/playground 中对其进行测试。
从 JavaScript 传递的variables
是一个具有相同结构的对象,很容易有条件地创建/修改。
在这种情况下SomeFilterInputType
(类型名称后没有!
标记)意味着它( filter
变量)可以为空/未定义 -通常可选参数可以为空(不是必需的)。 如果 API/BE 规范中需要一些 arg,那么客户端也必须需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.