Vue3中ref值的身份校验不符合预期,是认知偏差还是文档过时?
问题解答
Vue.js官方文档指出:
In Vue 3, Proxies are used for reactive objects and getter / setters are used for refs.
你的理解存在偏差,文档并未过时。
核心原因:当你用ref()包裹对象时,Vue会自动将该对象转换为响应式代理(Proxy)。objRef.value的getter返回的是这个代理对象,而非你传入的原始obj,因此obj === objRef.value会返回false。
如果传入的是原始值(如字符串、数字、布尔值),ref()的value会直接返回原始值本身,此时全等校验会成立。
你可以修改代码验证这一逻辑:
const obj = {}; const objRef = Vue.ref(obj); Vue.createApp({ setup() { console.log(Vue.isReactive(obj)); // false,原始对象非响应式 console.log(Vue.isReactive(objRef.value)); // true,返回的是响应式代理 return { answer: obj === objRef.value, }; } }).mount('#app');
内容的提问来源于stack exchange,提问作者Ahmad Shahwan
相关产品推荐
相关产品推荐

