Autorun

mobx.autorun 可以用于那些只想创建一个反应函数,而它本身永远不会有观察者。这通常是当你需要建立响应到命令式代码的桥梁,比如日志,持续化或者UI更新代码。当使用autorun时,每当其依赖的任何一个改变都会触发提供的函数。相比之下,computed(function)创建的函数只会重新评估它自身是否有观察的变量,否则它的值被认为是不相关的。作为一条法则:如果你有一个应该自动运行的函数但是结果不是一个新的值则使用autorun,其余的所有情况用computed。Autorun涉及到启动效果,但是并不会产生新值。如果传递给autorun的第一个参数是字符串,它将会被用于调试名称。

传递给autorun的函数在调用时将会接收一个参数,即当前reaction(autorun),可用于在执行期间处理autorun。

@observer decorator/function一样, autorun只会观察在执行期间提供的函数中使用的变量数据。

var numbers = observable([1,2,3]);
var sum = computed(() => numbers.reduce((a, b) => a + b, 0));

var disposer = autorun(() => console.log(sum.get()));
// prints '6'
numbers.push(4);
// prints '10'

disposer();
numbers.push(5);
// won't print anything, nor is `sum` re-evaluated