Javascript 如何在Meteor中获取反应数据源的旧值?
我正在寻找一种方法来获取Meteor中反应式数据源的旧值。假设我有这个代码:Javascript 如何在Meteor中获取反应数据源的旧值?,javascript,meteor,reactive-programming,meteor-tracker,Javascript,Meteor,Reactive Programming,Meteor Tracker,我正在寻找一种方法来获取Meteor中反应式数据源的旧值。假设我有这个代码: const foo = new ReactiveVar(1); Tracker.autorun(() => { const fooNewVal = foo.get(); if (/* compare based on fooNewVal value */) { // do something } }); foo.set(2); foo.set(3); foo.set(4); 我想要的是
const foo = new ReactiveVar(1);
Tracker.autorun(() => {
const fooNewVal = foo.get();
if (/* compare based on fooNewVal value */) {
// do something
}
});
foo.set(2);
foo.set(3);
foo.set(4);
我想要的是以某种方式获得foo
的旧值,将此旧值与新值一起使用以决定if语句的执行,如:
const foo = new ReactiveVar(1);
Tracker.autorun(() => {
const fooNewVal = foo.get();
const fooOldVal = foo.getOld();
if (fooNewVal - fooOldVal === 1) {
// do something
}
if (fooNewVal - fooOldVal === 2) {
// do something
}
});
foo.set(2);
foo.set(3);
我知道我可以使用一个正态变量将旧值存储在autorun
函数的末尾:
const foo = new ReactiveVar(1);
let oldValue = 1;
Tracker.autorun(() => {
const fooNewVal = foo.get();
if (fooNewVal - oldValue === 1) {
// do something
}
if (fooNewVal - oldValue === 2) {
// do something
}
oldValue = fooNewVal;
});
foo.set(2);
foo.set(3);
虽然它有效,但对我来说并不“合适”。我搜索了大气和Npm,但找不到解决方案。你知道有什么解决方案或软件包/模块可以解决这个问题吗?你现在做的很好。通常的做法是存储变量的早期版本。如果从数据库中提取数据,则自动运行函数开头的数据仍将是旧值。当反应变量发生变化时,会触发自动运行,因此在您的情况下,foo在输入时已经发生了变化。您所做的一切都很好。通常的做法是存储变量的早期版本。如果从数据库中提取数据,则自动运行函数开头的数据仍将是旧值。当反应变量改变时会触发自动运行,因此在您的例子中,foo在输入时已经改变。我知道我可以做到,事实上我一直都在这样做。但我觉得它不“合适”,一点也不“漂亮”。我更喜欢更直观的方式,比如
foo.getOld()
。我可以不使用这个.getOld
进行收集(事实上从未需要它),但对于ReactiveVar
,ReactiveDict
来说,使用缓存变量确实让我很烦恼。不管怎样,谢谢你的回答:)我知道我能做到,事实上我一直都在这样做。但我觉得它不“合适”,一点也不“漂亮”。我更喜欢更直观的方式,比如foo.getOld()
。我可以不使用这个.getOld
进行收集(事实上从未需要它),但对于ReactiveVar
,ReactiveDict
来说,使用缓存变量确实让我很烦恼。无论如何,谢谢你的回答:)