2016-11-18 4 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.subscribe вызывается и делает магию с подписками?

ответ

2

Контейнер ReactMeteorData запускает обратный вызов createContainer внутри реактивного вычисления Tracker.

Одна из его функций - прекратить подписку, если вычисление признано недействительным или остановлено.

Если функция повторного запуска создает идентичную подписку (такая же публикация, те же параметры), библиотека достаточно умна и не отменяет и не создает одну и ту же подписку.

Когда компонент размонтирован, вычисление прекращается, подписка отменяется и не воссоздается (поскольку обратный вызов не вызывается снова) и поэтому автоматически отписывается.

Если вы звоните Meteor.subscribe в реактивном вычислении, например, с использованием Tracker.autorun, подписка будет автоматически отменена, если вычисление будет отменено или остановлено; нет необходимости называть stop по подпискам, сделанным изнутри autorun. Однако, если следующая итерация вашей функции запуска соответствует одному и тому же набору записей (то же имя и параметры), Meteor достаточно умен, чтобы пропускать расточительную отмену подписки/повторную подписку.

(источник: Meteor Docs)

+0

Это имеет смысл, теперь. Благодаря! –

Смежные вопросы