javascript - 如何在 Meteor 中获取响应式(Reactive)数据源的旧值?

标签 javascript meteor reactive-programming meteor-tracker

我正在寻找一种方法来获取 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/

相关文章:

php - 在单独的页面上将数据从一种形式传递到另一种形式

javascript - 有人可以解释为什么 reduce 函数安慰了以下数字

android - Meteor 的可扩展性和性能

android - 何时取消订阅

javascript - RxJs 处理异常而不终止

java - 使用 RxJava 进行电子邮件登录验证,一个 observable 发出两次

javascript - 如何在剧作家中的选择器上获取 classList?

javascript - 如何轻松访问嵌套对象中的属性?

javascript - 带有锤子的 meteor :hammer package: The Hammer variable exists, 但未定义

javascript - 如何使用 Meteor Promise 调用 3 个电话