javascript - 如何有条件地在 GraphQL 查询中包含过滤参数?
问题描述
我有以下 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 ) {
filter
在 [query] 变量中传递值:
{
filter: { search: 'sth'}
}
... SomeFilterInputType
[users
查询] arg 类型名称在哪里,它可以从 API 规范中读取,在 graphiql/playground 文档中可用 ...或服务器代码/类型定义
可以使用 QUERY VARIABLES 在 graphiql/playground 中对其进行测试。
variables
从 JavaScript 传递的是一个具有相同结构的对象,很容易有条件地创建/修改。
在这种情况下SomeFilterInputType
(类型名称后没有!
标记)意味着它(filter
变量)可以为空/未定义 -通常可选参数可以为空(不是必需的)。如果 API/BE 规范中需要某些 arg,那么客户端也必须需要它。
推荐阅读
- testing - 统计检验的检验假设——夸大的 I 型错误
- javascript - Safari iOS 扩展的控制台日志在哪里?
- angular - Angular Pwa 未在已安装的应用程序上刷新 html
- rabbitmq - Spring AMQP 惰性队列@RabbitListener 并简化直接回复配置
- amazon-web-services - 放大,用户无权在资源上执行 iam:passRole
- javascript - XRController 光线投射距离问题
- html - CSS - 对于内联元素,据说垂直边距(顶部|底部)将不适用
- ruby-on-rails - 如何在 React/Rails 应用程序中获取 CSRF 令牌?ActionController::InvalidAuthenticityToken
- python - 将 HTML 页面加载到融合时出错:解析 xhtml 时出错:无法识别的 XML 指令;预期 CDATA 或评论 ('
我正在尝试将 HTML 页面加载为新页面。HTML 内容存储在变量“内容”中。执行代码时出现以下错误。
requests.exceptions.HTTPError:解析 xhtml 时出错:无法识别的 XML 指令;预期 CDATA 或注释('<![CDAT
- javascript - 下一个 js 命名为没有 SSR 的导入