我已经使用MobX几年了,我很喜欢它,但有时我的跟踪调用不起作用,我不明白为什么不起作用。肯定有一些基本的事情我完全误解了,但很可能我已经足够幸运地度过了难关。这里有一个使用trace()
的例子,我在这里得到了一个错误:
import { computed, observable, trace } from "mobx";
class Stat {
@observable baseValue = 1;
@computed get value() {
trace();
return this.baseValue;
}
}
const strength = new Stat();
strength.baseValue = strength.baseValue + 1;
在我看来,预期的输出是trace对";baseValue";并记录更改。相反,我得到了以下错误:
错误:[MobX]"trace(break?("只能在跟踪的计算值或Reaction中使用。考虑传入计算值或反应显式
"在被跟踪的计算值"内";据我所知,这正是我正在做的事情。或
完整沙盒:https://codesandbox.io/s/mobx-trace-trouble-ki2qj?file=/index.ts:0-312
就我对这个短语的理解而言
在跟踪计算值或Reaction内。
您需要访问反应式上下文中的计算值,如observer
、reaction
或autorun
中的值。否则,trace
就没有关于正在发生的事情的信息,因为你的计算值在那一刻没有被任何观察者跟踪。
因此,这将起作用:
const MyComponent = observer(() => {
return <div>{strength.value}</name>
})
或者这个
autorun(() => {
console.log(strength.value);
});