Meteor - 模板在onCreated中有多个autoruns,具有不同的反应依赖性?

时间:2016-12-30 18:08:56

标签: javascript meteor

在Meteor模板的onCreated函数中,可以有多个autoruns:

Template.componentA.onCreated(function() {

  this.autorun(() => {
    const varX = Session.get('varX');
    // block X
  });

  this.autorun(() => {
    const varY = Session.get('varY');
    // block Y
  });

});

具体而言,他们是否会分别处理反应依赖性?

(所以每次会话变量'varX'改变时我都不会重新运行块Y,并且每次会话变量'varY'改变时我都不会重新运行块X)

2 个答案:

答案 0 :(得分:1)

Meteor会将各种autoruns中声明的内容放在同一个函数中,所以如果将它们分开则没有区别。 要实现分离的反应性,请考虑创建两个不同的组件。

答案 1 :(得分:1)

每个声明的自动运行功能都会查找被动数据源更改以触发自身(meteor doc)。所以你可以清楚地使用不同的autoruns。

这是测试它的演示代码。

this.autorun(function () {
    // a call to Session.set("test",1) will trigger the autorun
    var test = Session.get("test");
    console.log("autorun test");
});

this.autorun(function () {
    // a call to Session.set("test2",2) will trigger the autorun
    var test = Session.get("test2");
    console.log("autorun test2");
});

然后你可以在控制台中测试,这是输出:

Session.set("test",1)
>undefined
>landing.js:148 autorun test
Session.set("test2",1)
>undefined
>landing.js:153 autorun test2

要处理不应触发自动运行的数据源,请使用Tracker.nonreactive