Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 一个包含多个键的大ReactiveVar,还是一个包含多个ReactiveVar的大哈希?_Meteor - Fatal编程技术网

Meteor 一个包含多个键的大ReactiveVar,还是一个包含多个ReactiveVar的大哈希?

Meteor 一个包含多个键的大ReactiveVar,还是一个包含多个ReactiveVar的大哈希?,meteor,Meteor,比如说, 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), } 哪一个更好?对于设置A,很难只更新一个字段 最佳实践是什么。在可能的情况

比如说,

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),
}
哪一个更好?对于设置A,很难只更新一个字段


最佳实践是什么。

在可能的情况下,第二个示例更好,因为它具有更细粒度的反应性

使用第一个示例:

var auto1=Tracker.autorun(函数(){
doSomethingWith(settingsA.get().a.b);
});
var auto2=Tracker.autorun(函数(){
doSomethingElseWith(设置a.get().d);
});
如果你这样做

var old=settingsA.get();
d=5;
设置a.设置(旧);
然后将重新运行
auto1
auto2
,即使
auto1
访问的数据没有更改

另一方面,使用第二个示例:

var auto1=Tracker.autorun(函数(){
doSomethingWith(setingsb.a.b.get());
});
var auto2=Tracker.autorun(函数(){
DOSOMETHINGELSWITH(设置SB.d.get());
});
执行
settingsB.d.set(5)
只会导致
auto2
重新运行,而不会导致
auto1


现在,如果动态插入和删除散列中的键,则第二种情况可能不可能出现。在这种情况下,您应该考虑使用<代码> ReActudieICT < /C> >

< P>可能的话,第二个例子更好,因为它具有更细粒度的反应性。

使用第一个示例:

var auto1=Tracker.autorun(函数(){
doSomethingWith(settingsA.get().a.b);
});
var auto2=Tracker.autorun(函数(){
doSomethingElseWith(设置a.get().d);
});
如果你这样做

var old=settingsA.get();
d=5;
设置a.设置(旧);
然后将重新运行
auto1
auto2
,即使
auto1
访问的数据没有更改

另一方面,使用第二个示例:

var auto1=Tracker.autorun(函数(){
doSomethingWith(setingsb.a.b.get());
});
var auto2=Tracker.autorun(函数(){
DOSOMETHINGELSWITH(设置SB.d.get());
});
执行
settingsB.d.set(5)
只会导致
auto2
重新运行,而不会导致
auto1

现在,如果动态插入和删除散列中的键,则第二种情况可能不可能出现。在这种情况下,您应该考虑使用<代码> ReActudieICT < /代码> .<