В MobX свойства @computed
кэшируются только при доступе из observer
или реактивного контекста.Так, например:
class Foo {
@computed
get somethingExpensive() { return someReallyExpensiveOperation() }
}
const f = new Foo();
setInterval(() => console.log(f.somethingExpensive), 1);
Всегда будет вызывать someReallyExpensiveOperation()
, потому что computed
вызывается вне реактивного контекста.
Есть ли способ "войти" в реактивный контекст, чтобы получить преимущества @computed
для setTimeout
обратных вызовов, EventEmitter
обработчиков событий и т. Д.?
РЕДАКТИРОВАТЬ: Другой способ поставить это .. если я изменю декоратор на
class Foo {
@computed({ requiresReaction: true })
get somethingExpensive() { return someReallyExpensiveOperation() }
}
.. он будет выброшен при доступе из примера setInterval
.