Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除了Apollo GraphQL查询所需的导出变量后,如何停止这些变量的获取 问题_Graphql_Single Page Application_Apollo Client - Fatal编程技术网

删除了Apollo GraphQL查询所需的导出变量后,如何停止这些变量的获取 问题

删除了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(如:

当从使用应用程序路由状态作为必需变量的查询组件中导航时,我会得到以下类型的GraphQL错误:

未提供所需类型为“ID!”的变量“$analysisId”

“离开”的意思是,例如,离开

  • 发件人:
    /analysis/analysis-1/analysis/
  • 收件人:
    /user profile/
背景 我正在使用Apollo GraphQL构建SPA,我有一些查询遵循以下模式:

查询分析($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
仍然被订阅,因此它使用null
analysisId
变量发送查询,即使它是必需的

我试过的 通过破坏我的中的每个方法,我可以合理地确定组件基类没有错——没有证据表明它在路由更改时正在重新访问组件。相反,我认为这是在阿波罗客户机内部发生的

我可能可以将查询的模式从
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}),
]);