理解流星订阅
问题描述:
我不明白,从react-meteor-data理解流星订阅
import { createContainer } from 'meteor/react-meteor-data';
export default FooContainer = createContainer(() => {
// Do all your reactive data access in this method.
// Note that this subscription will get cleaned up when your component is unmounted
var handle = Meteor.subscribe("todoList", this.props.id);
return {
currentUser: Meteor.user(),
listLoading: ! handle.ready(),
tasks: Tasks.find({listId: this.props.id}).fetch(),
};
}, Foo);
为什么建议stop
订阅当Component
被卸除,但是,在这种情况下这个例子中,不设法阻止什么? Meteor如何处理订阅?什么时候收集清洁?每次执行跟踪器回调时,订阅是否都堆叠起来?
或者是流星很聪明,知道何时Meteor.subscribe
被调用,并且与订阅有关吗?
答
ReactMeteorData容器在被动Tracker
计算中运行createContainer
的回调。
其功能之一是停止订阅,如果计算无效或停止。
如果重新运行的函数产生相同的订阅(相同的发布,相同的参数),那么该库足够智能并且不会取消并重新创建相同的订阅。
当组件被卸载时,计算停止,订阅被取消并且不被重新创建(因为回调未被再次调用)并且因此自动取消订阅。
如果调用
Meteor.subscribe
反应的计算中,例如使用Tracker.autorun
,当计算无效或停止订阅将自动取消;没有必要致电stop
从autorun
内部订购。但是,如果您的run函数的下一次迭代订阅了相同的记录集(相同的名称和参数),Meteor足够聪明,可以跳过浪费的取消订阅/重新订阅。
(来源:Meteor Docs)
这更有意义,现在。谢谢! –