我正在寻找一种方法来获取 Meteor 中响应式(Reactive)数据源的旧值。假设我有这个代码:
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);
虽然它有效,但对我来说看起来并不“正确”。我搜索了 Atmosphere 和 Npm 但找不到解决方案。您知道有什么解决方案或包/模块可以解决这个问题吗?
最佳答案
你正在做的事情很好。存储变量的先前版本是一种常见的做法。如果您从数据库中获取,则自动运行函数开头的数据仍将是旧值。当 react 变量更改时会触发自动运行,因此在您的情况下 foo 在输入时已经更改。
关于javascript - 如何在 Meteor 中获取响应式(Reactive)数据源的旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957774/