我正在尝试优化由整个应用程序共享的某些React组件(例如Footer和Header组件)执行的查询。
在未提供变量institutionPath
的情况下,我试图不获取学生解决方案的详细信息。
query organisationAndInstitution($organisationName: String!, $institutionPath: String!, $fetchInstitution: Boolean!){
organisation(where: {
name: $organisationName
}){
name
}
studentSolutionRelationships(where:{
AND: [
{
status: PUBLISHED
},
{
studentSolution: {
status: PUBLISHED
}
}
]
}) @include(if: $fetchInstitution) {
status
}
}
为此,我添加了一个fetchInstitution
布尔变量并添加了@include(if: $fetchInstitution)
指令。
但是指令似乎仅适用于字段,而不适用于整个查询。所以我想知道我想做的事是否可行,因为我写的方式无效。
答案 0 :(得分:1)
可以使用@include
指令显式包括包含GraphQL文档中的任何字段,也可以使用@skip
指令显式排除。该指令应在字段名称和参数之后,但在该字段的选择集(如果有的话)之前提供,如您的问题所示:
studentSolutionRelationships(where:{
#...input fields omitted for brevity
}) @include(if: $fetchInstitution) {
status
}
该指令采用单个参数(if
),该参数必须为Boolean
值。该值可以是文字(即true
或false
)或Boolean
类型的变量。 GraphQL没有提供一种评估表达式的方法-任何条件逻辑都必须驻留在客户端代码中,并用于确定传递给if
参数的变量的值。
这些指令可以应用于文档中的 any 字段,包括问题中的studentSolutionRelationships
和organisation
之类的根级指令。实际上,您可以使用这些指令排除所有根字段-请记住,在这种情况下,查询仍将运行,并且只返回一个空对象。
换句话说,这里的方法是正确的。如果查询失败,则是由于不相关的问题。