【问题标题】:Understanding Meteor subscription了解 Meteor 订阅
【发布时间】:2016-11-19 00:53:10
【问题描述】:

看不懂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);

为什么在卸载Component 时推荐stop 订阅,但在这种情况下,没有努力阻止任何事情?那么 Meteor 是如何处理订阅的呢?什么时候清理收藏品?每次执行跟踪器回调时,订阅是否都会堆积?

或者 Meteor 是否足够聪明,可以知道何时调用 Meteor.subscribe 并对订阅施展魔法?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    ReactMeteorData 容器在反应式Tracker 计算中运行createContainer 的回调。

    其功能之一是在计算无效或停止时停止订阅。

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

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

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

    (来源:Meteor Docs

    【讨论】:

    • 现在更有意义了。谢谢!
    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2013-01-18
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多