删除了Apollo GraphQL查询所需的导出变量后,如何停止这些变量的获取 问题
当从使用应用程序路由状态作为必需变量的查询组件中导航时,我会得到以下类型的GraphQL错误: 未提供所需类型为“ID!”的变量“$analysisId” “离开”的意思是,例如,离开删除了Apollo GraphQL查询所需的导出变量后,如何停止这些变量的获取 问题,graphql,single-page-application,apollo-client,Graphql,Single Page Application,Apollo Client,当从使用应用程序路由状态作为必需变量的查询组件中导航时,我会得到以下类型的GraphQL错误: 未提供所需类型为“ID!”的变量“$analysisId” “离开”的意思是,例如,离开 发件人:/analysis/analysis-1/analysis/ 收件人:/user profile/ 背景 我正在使用Apollo GraphQL构建SPA,我有一些查询遵循以下模式: 查询分析($analysisId:ID!){ 位置@客户端{ params{ analysisId@export(如:
- 发件人:
/analysis/analysis-1/analysis/
- 收件人:
/user profile/
查询分析($analysisId:ID!){
位置@客户端{
params{
analysisId@export(如:“analysisId”)
}
}
分析(analysisId:$analysisId){
身份证件
#…等等
}
}
location
字段获取SPA路由器状态的表示。该状态保存在Apollo客户端的“反应变量”中。查询组件被编程为不开始订阅查询,除非反应变量存在并且具有所需的内容
shouldSubscribe():布尔值{
return!!(locationVar()?.params?.analysisId);
}
Params表示express样式的URL参数,因此路由路径是/analysis/:analysisId/analysis
如果用户导航到/analysis/analysis-1/analysis
,查询组件的变量将变成:{analysisId:“analysis-1”}`。这在加载组件时工作正常
我认为正在发生的事情
当组件连接到DOM时,它会检查路由器状态中是否存在所需的变量,如果存在,它会创建一个ObservableQuery
并订阅
稍后,当用户导航离开时,当客户端字段location.params.analysisId
导出的所需analysisId
变量突然为空时,observequiry
仍订阅更新
我认为,由于ObservableQuery
仍然被订阅,因此它使用nullanalysisId
变量发送查询,即使它是必需的
我试过的
通过破坏我的中的每个方法,我可以合理地确定组件基类没有错——没有证据表明它在路由更改时正在重新访问组件。相反,我认为这是在阿波罗客户机内部发生的
我可能可以将查询的模式从analysis(analysisId:ID!):analysis
更改为analysis(analysisId:ID):analysis
,但这似乎有些迂回,因为我可能无法控制服务器
当apollo客户端有必需的变量但它们不存在时,如何防止它尝试获取查询?到目前为止,在我的HttpLink中,src/apollo/link/http.ts
:
从'@apollo/client/link/core'导入{ApolloLink,from};
从“@apollo/client/link/http”导入{HttpLink};
从“@apollo elements/lib/has all variables”导入{hasAllVariables};
常量uri=
“GRAPHQL_主机/GRAPHQL”;
导出常量httpLink=from([
新链接((操作,前进)=>{
如果(!hasAllVariables(操作))
返回;
其他的
返回向前(操作);
}),
新的HttpLink({uri}),
]);