Javascript mobx中@observable和@observable.ref修饰符之间有什么区别?

Javascript mobx中@observable和@observable.ref修饰符之间有什么区别?,javascript,observable,mobx,mobx-react,Javascript,Observable,Mobx,Mobx React,Mobx同时支持@observable和@observable.ref修饰符,它们的官方文档说 observable: This is the default modifier, used by any observable. It clones and converts any (not yet observable) array, Map or plain object into it's observable counterpart upon assignment to the given

Mobx同时支持@observable和@observable.ref修饰符,它们的官方文档说

observable: This is the default modifier, used by any observable. It clones and converts any (not yet observable) array, Map or plain object into it's observable counterpart upon assignment to the given property

observable.ref: Disables automatic observable conversion, just creates an observable reference instead.

我不明白为什么我们需要为一个已经存在的可观察对象创建一个可观察引用。这两个对象有何不同?它们的用例是什么?

可观察的。ref
只跟踪对象的引用更改,这意味着您需要更改整个对象才能触发反应。因此,例如,如果您有一个通过引用跟踪的可观察数组,那么该数组的内容将不会被跟踪。此外,如果向数组中添加项,也不会跟踪更改

import{observable,reaction}来自“mobx”;
常数测试=可观察(
{
参考:[{id:1}]
},
{
参考:observable.ref
}
);
反应(
() => {
返回测试.参考.长度;
},
() => {
console.log(“反应1:参考长度改变”);
}
);
反应(
() => {
返回测试。参考[0];
},
() => {
控制台日志(“反应2:参考项目变更”);
}
);
test.reference[0]={id:2};//这不会引发反应
test.reference.push({id:3});//这不会引发反应
test.reference.pop();//这不会引发反应
test.reference=[];//这将引发两种反应