2016-11-18 14 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); 

からこの例を理解していないものの、この場合には、何の努力は何を停止するようになされていませんか? Meteorはサブスクリプションをどのように処理しますか?コレクションはいつ掃除されますか?トラッカーコールバックが実行されるたびにサブスクリプションがスタックアップしていますか?

Meteor.subscribeが呼び出されているときに知っていて、サブスクリプションで魔法を覚えていれば十分ですか?

答えて

2

ReactMeteorDataコンテナは、のコールバックを無効なTracker計算内で実行します。

1つの特徴は、計算が無効または停止した場合にサブスクリプションを停止することです。

関数の再実行で同じサブスクリプション(同じパブリケーション、同じパラメータ)が生成された場合、ライブラリは十分にスマートで、同じサブスクリプションをキャンセルして再作成しません。

コンポーネントがアンマウントされると、計算が中止され、サブスクリプションは取り消され、再作成されません(コールバックが再度呼び出されないため)。自動的にサブスクライブされません。あなたがTracker.autorunを使用して、たとえば、反応性の計算内Meteor.subscribeを呼び出す場合

、計算が無効または停止されたときにサブスクリプションが自動的にキャンセルされます。内部autorunからの購読についてstopに電話する必要はありません。しかし、あなたのrun関数の次の反復が同じレコードセット(同じ名前とパラメータ)に登録されている場合、Meteorは無駄な購読解除/再購読をスキップするほどスマートです。

(ソース:Meteor Docs

+0

今、より理にかなっています。ありがとう! –