gpt4 book ai didi

reactjs - 明确停止订阅

转载 作者:行者123 更新时间:2023-12-05 07:28:25 24 4
gpt4 key购买 nike

在我的 Meteor 应用程序中,我有一个可能会或可能不会发布大量文档的出版物。通常,该出版物会发布任意数量的文档,最多可达数百个。但是,这些文件是由用户添加的,用户可以添加的数量没有限制。因此,理论上(在实践中的某个时刻)用户可以拥有数千、数万甚至数十万份将使用此出版物发布的文档。

虽然我使用分页仅显示少量文档,但该发布是一个自定义发布,它连接了多个集合的数据,因此分页、过滤和排序都发生在查询中:

const subscription = Meteor.subscribe('myLargePublication');
const documents = MyLargePublication.find({ query }, { skip, limit, sort });

无论文档数量如何,它都可以正常工作。但是,我遇到的问题是,如果用户进入此 View ,然后立即路由到另一个 View ,则所有后续订阅都将被阻止,直到下载了来自 myLargePublication 的所有数据。

来自meteor documentation on #subscribe我认为有一个函数 stop() 可以在订阅的处理程序上调用

Cancel the subscription. This will typically result in the server directing the client to remove the subscription’s data from the client’s cache.

因此,我希望使用这样的东西可以解决问题:

componentWillUnmount() {
const { subscription } = this.props;
subscription.stop()
}

在我的出版物中查看来自 this.onStop(() => { ... }) 的日志并没有揭示任何有用的见解。看起来这个函数在这种情况下根本没有做任何事情,我觉得要解决我的问题,我必须更改我的发布/订阅。

有什么方法可以提前取消客户端的订阅吗?

最佳答案

我相信你有一个设计问题,你的Meteor.subscribe('myLargePublication'); 可以接受另一个控制 Meteor.publish 行为的增强,所以你一次可以发送 10 个文档,或者根据用户搜索返回一组文档。

不用说,发布数百个文档是不合理的,这会影响服务器/客户端的性能,话虽如此,由于您使用的是 React,当组件卸载时订阅应该停止。

您可以查看一些可能对您的情况有所帮助的库

Reactive subscription (当参数传递给 Meteor.publish 时,不会从头开始重新启动订阅)

Tracker - component (组件卸载时停止订阅)

关于reactjs - 明确停止订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53352712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com