如何获取流星中反应性数据源的旧值?
问题描述:
我正在寻找一种方法来获取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);
我想以某种方式获得的foo
旧值,使用旧值与新值来决定,如果语句的执行,如:
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);
虽然它的工作原理,它不看“右”对我来说。我搜索了Atmosphere和Npm,但找不到解决方案。你知道任何解决方案或包/模块来解决这个问题吗?
答
你在做什么很好。存储先前版本的变量是一种常见的做法。如果您从数据库中获取数据,自动运行功能开始处的数据仍旧是旧值。自动运行会在被动变量发生变化时触发,因此在您的情况下,foo在输入时已经改变。
我知道我可以这样做,事实上我一直在这样做。但它对我来说并不觉得“正确”,根本看不到“漂亮”。我更喜欢更直观的方式,比如'foo.getOld()'。我没有这个用于集合的'.getOld'(事实上从来不需要它),但对于'ReactiveVar''',ReactiveDict'它真的使我使用缓存变量困扰。无论如何感谢您的回答:) – Khang