如何有条件地在 GraphQL 查询中包含过滤参数?
How to conditionally include a filtering 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
(在查询时定义)变量传递(整个 'composed/prepared earlier')值。保留此变量未定义使其成为可选的。
query GetUsers($filter: SomeFilterInputType) {
users(
first: 10,
filter: $filter ) {
在[查询]变量中为filter
传递值:
{
filter: { search: 'sth'}
}
... 其中 SomeFilterInputType
是一个 [users
查询] arg 类型名称,可以从 API 规格中读取,在 [=39 中可用=] 文档 ... 或服务器 code/type defs
可以使用查询变量在 graphiql/playground 中进行测试。
variables
从 JavaScript 传递的是一个具有相同结构的对象,很容易 created/modified 有条件。
在这种情况下SomeFilterInputType
(类型名称后没有!
标记)意味着它(filter
变量)可以是nulled/undefined - 通常是可选的args 可以为 nullable(不需要)。如果 API/BE 规范中需要某些 arg,那么它也必须在客户端中被要求。
我有以下 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
(在查询时定义)变量传递(整个 'composed/prepared earlier')值。保留此变量未定义使其成为可选的。
query GetUsers($filter: SomeFilterInputType) {
users(
first: 10,
filter: $filter ) {
在[查询]变量中为filter
传递值:
{
filter: { search: 'sth'}
}
... 其中 SomeFilterInputType
是一个 [users
查询] arg 类型名称,可以从 API 规格中读取,在 [=39 中可用=] 文档 ... 或服务器 code/type defs
可以使用查询变量在 graphiql/playground 中进行测试。
variables
从 JavaScript 传递的是一个具有相同结构的对象,很容易 created/modified 有条件。
在这种情况下SomeFilterInputType
(类型名称后没有!
标记)意味着它(filter
变量)可以是nulled/undefined - 通常是可选的args 可以为 nullable(不需要)。如果 API/BE 规范中需要某些 arg,那么它也必须在客户端中被要求。