例如,
var settingsA = new ReactiveVar({
a: {
b : true,
c : 1
},
d: true,
})
var settingsB = {
a: {
b: new ReactiveVar(true),
c: new ReactiveVar(1),
},
d: new ReactiveVar(true),
}
哪一个更好?对于settingA,很难只更新一个字段。
最佳做法是什么。
答案 0 :(得分:0)
在可能的情况下,第二个例子更好,因为它具有更细粒度的反应性。
使用第一个例子:
var auto1 = Tracker.autorun(function () {
doSomethingWith(settingsA.get().a.b);
});
var auto2 = Tracker.autorun(function () {
doSomethingElseWith(settingsA.get().d);
});
如果你这样做
var old = settingsA.get();
old.d = 5;
settingsA.set(old);
然后重新运行auto1
和auto2
,即使auto1
访问的数据未更改。
另一方面,使用第二个例子:
var auto1 = Tracker.autorun(function () {
doSomethingWith(settingsB.a.b.get());
});
var auto2 = Tracker.autorun(function () {
doSomethingElseWith(settingsB.d.get());
});
执行settingsB.d.set(5)
只会导致auto2
重新投放,而不会auto1
。
现在,如果动态插入和删除散列中的键,则可能无法进行第二种情况。在这种情况下,您应该考虑使用ReactiveDict
。