Graphql 使用apollo客户端挂钩停止挂起的请求

Graphql 使用apollo客户端挂钩停止挂起的请求,graphql,apollo,react-apollo,Graphql,Apollo,React Apollo,通过client.stop取消挂起的请求看起来很简单,但是当我们在没有客户端的情况下使用apollo客户端挂钩时,文档并没有向我们展示解决方案 如何使用apollo客户端钩子停止挂起的请求?苦苦挣扎了好几天,终于证明了这一概念的有效性 我已经在这里解释了代码,这是我的POC- 解释: 第1步: 创建一个中间件,该中间件包含通过ReactJS上下文API跟踪和取消重复请求的逻辑–完整的源代码 第2步: 生成名称空间UUID并使用requestTrackerId通过查询上下文传递它,如下所示 con

通过client.stop取消挂起的请求看起来很简单,但是当我们在没有客户端的情况下使用apollo客户端挂钩时,文档并没有向我们展示解决方案

如何使用apollo客户端钩子停止挂起的请求?

苦苦挣扎了好几天,终于证明了这一概念的有效性

我已经在这里解释了代码,这是我的POC-

解释:

第1步: 创建一个中间件,该中间件包含通过ReactJS上下文API跟踪和取消重复请求的逻辑–完整的源代码

第2步: 生成名称空间UUID并使用requestTrackerId通过查询上下文传递它,如下所示

context:{ 
  requestTrackerId: uuidNameSpace('LOGIN', RequestNameSpace) 
}
来源-

第3步: 最后连接所有中间件,并使用Apollo GraphQL客户端的API将其设置为漏斗层,并设置为false

行动机制: 当有多个请求来自同一个变异查询时,每个查询都被标记为其requestTrackerId,该ID对于该特定查询保持不变,对于其他查询则不同

使用库名称空间为每个查询生成读取代码。中间件使用此ID将每个查询与其命名空间生成的ID相关联,并将其存储在缓存对象中

使用缓存对象查找后续传入请求。如果有一个正在进行的请求尚未完成,将立即使用AbortController javascript API中止该请求,并用新请求替换该请求

使用的图书馆 –用于创建唯一的请求跟踪器ID并阻止命名空间 来自同一组件的多个请求发生冲突。 ReactJS–我想不需要介绍了吧? Apollo GraphQL–点击链接了解更多信息。。 希望这个答案有帮助。快乐编码

奋斗了几天,终于证明了这一概念的有效性

我已经在这里解释了代码,这是我的POC-

解释:

第1步: 创建一个中间件,该中间件包含通过ReactJS上下文API跟踪和取消重复请求的逻辑–完整的源代码

第2步: 生成名称空间UUID并使用requestTrackerId通过查询上下文传递它,如下所示

context:{ 
  requestTrackerId: uuidNameSpace('LOGIN', RequestNameSpace) 
}
来源-

第3步: 最后连接所有中间件,并使用Apollo GraphQL客户端的API将其设置为漏斗层,并设置为false

行动机制: 当有多个请求来自同一个变异查询时,每个查询都被标记为其requestTrackerId,该ID对于该特定查询保持不变,对于其他查询则不同

使用库名称空间为每个查询生成读取代码。中间件使用此ID将每个查询与其命名空间生成的ID相关联,并将其存储在缓存对象中

使用缓存对象查找后续传入请求。如果有一个正在进行的请求尚未完成,将立即使用AbortController javascript API中止该请求,并用新请求替换该请求

使用的图书馆 –用于创建唯一的请求跟踪器ID并阻止命名空间 来自同一组件的多个请求发生冲突。 ReactJS–我想不需要介绍了吧? Apollo GraphQL–点击链接了解更多信息。。
希望这个答案有帮助。快乐编码

请解释解决方案的依据here@mohas这在博客文章的动机和步骤中有解释。我最终将请求置之不理,如果组件被删除,则忽略redux或组件更新unmounted@mohas你在用redux传奇吗?也张贴一个你的源github或fiddler链接,这样我就可以看它了。对不起,但你的答案不清楚。请在此解释请解释您的解决方案的依据here@mohas这在博客文章的动机和步骤中有解释。我最终将请求置之不理,如果组件被删除,则忽略redux或组件更新unmounted@mohas你在用redux传奇吗?也张贴一个你的源github或fiddler链接,这样我就可以看它了。对不起,但你的答案不清楚。请解释一下