Я ищу способ получить старую ценность реактивного источника данных в Метеор. Скажем, у меня есть этот код:Как получить старую ценность реактивного источника данных в Метеор?
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.getOld()'. Я в порядке с отсутствием этого '.getOld' для коллекции (никогда не нуждался в этом на самом деле), но для' ReactiveVar', 'ReactiveDict' мне действительно мешает использовать переменные кэша. В любом случае спасибо за ваш ответ :) – Khang