Javascript 如何在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); 我想要的是

我正在寻找一种方法来获取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
的旧值,将此旧值与新值一起使用以决定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
来说,使用缓存变量确实让我很烦恼。无论如何,谢谢你的回答:)