2016-11-18 127 views
2

我不明白,从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被调用,并且与订阅有关吗?

回答

2

ReactMeteorData容器在被动Tracker计算中运行createContainer的回调。

其功能之一是停止订阅,如果计算无效或停止。

如果重新运行的函数产生相同的订阅(相同的发布,相同的参数),那么该库足够智能并且不会取消并重新创建相同的订阅。

当组件被卸载时,计算停止,订阅被取消并且不被重新创建(因为回调未被再次调用)并且因此自动取消订阅。

如果调用Meteor.subscribe反应的计算中,例如使用Tracker.autorun,当计算无效或停止订阅将自动取消;没有必要致电stopautorun内部订购。但是,如果您的run函数的下一次迭代订阅了相同的记录集(相同的名称和参数),Meteor足够聪明,可以跳过浪费的取消订阅/重新订阅。

(来源:Meteor Docs

+0

这更有意义,现在。谢谢! –