2016-11-18 131 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

這更有意義,現在。謝謝! –