reactjs - 明确停止订阅
问题描述
在我的 Meteor 应用程序中,我有一个出版物,它可能会或可能不会发布大量文档。通常,该出版物发布任何数量的文档,最多几百个。但是,这些文档是由用户添加的,用户可以添加的数量没有限制。因此,理论上(以及在实践中的某个时刻)用户可以拥有数千、数万甚至数十万的文档,这些文档将使用此出版物发布。
虽然我使用分页只显示少量文档,但发布是一个自定义发布,它连接了多个集合的数据,因此分页、过滤和排序都发生在查询中:
const subscription = Meteor.subscribe('myLargePublication');
const documents = MyLargePublication.find({ query }, { skip, limit, sort });
无论文档数量如何,这都可以正常工作。但是,我遇到的问题是,如果用户进入此视图,然后立即路由到另一个视图,则所有后续订阅都将被阻止,直到myLargePublication
下载所有数据。
从#subscribe 上的流星文档中,我认为有一个函数stop()
可以在订阅的处理程序上调用
取消订阅。这通常会导致服务器指示客户端从客户端的缓存中删除订阅的数据。
因此,我希望使用这样的东西可以解决这个问题:
componentWillUnmount() {
const { subscription } = this.props;
subscription.stop()
}
查看this.onStop(() => { ... })
我出版物中的日志并没有发现任何有用的见解。在这种情况下,这个函数似乎根本没有做任何事情,我觉得要解决我的问题,我必须更改我的发布/订阅。
有什么办法可以提前取消客户的订阅?
解决方案
我相信您有一个设计问题,您Meteor.subscribe('myLargePublication');
可以接受另一个控制 的行为的增强Meteor.publish
,因此您可以一次发送 10 个文档,或者根据用户搜索返回一组文档。
不用说,发布数百个文档是不合理的,这会影响服务器/客户端的性能,话虽如此,由于您使用的是 React,当组件卸载时订阅应该停止。
您可以查看一些可能对您的情况有所帮助的库
反应式订阅(当参数传递给 Meteor.publish 时,不会从头开始重新开始订阅)
Tracker - 组件(组件卸载时停止订阅)
推荐阅读
- python - 如何在滚动的基础上从数据帧中获取逆协方差矩阵
- google-cloud-dataflow - 来自工作人员的错误消息:generic::aborted: SDK 线束 sdk-0-1 已断开连接
- node.js - 节点获取 API 请求
- c# - 使用 DataContractJsonSerializer 转换为对象时,Serilog JSon 抛出异常
- ios - 有没有办法在 `UIApplication` 或 `UIWindow` 级别检测 VoiceOver 焦点更改/用户交互?
- windows-server-2019 - Server 2019 v1809 StandardEvaluation 无法使用 KMS 客户端设置密钥升级到标准
- google-chrome - Google Apps 脚本我想将组织中的所有用户添加到组
- datatables - 具有多个查询的数据表服务器端处理
- javascript - 如何将数据放入 ayncStorage?
- java - 在 tomcat 8 中,如何在 setenv.bat 中提供文件路径以从 java 类中读取