在计算中使用时 trace() 错误"can only be used inside a tracked computed value or a Reaction"



我已经使用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内。

您需要访问反应式上下文中的计算值,如observerreactionautorun中的值。否则,trace就没有关于正在发生的事情的信息,因为你的计算值在那一刻没有被任何观察者跟踪。

因此,这将起作用:

const MyComponent = observer(() => {
return <div>{strength.value}</name>
})

或者这个

autorun(() => {
console.log(strength.value);
});

最新更新