在将现有的应用程序从Vue2移植到Vue3时,我遇到了一个令人惊讶的问题.
如何让Vue3监视"外部"数组以获取更改?
This worked perfectly fine in Vue2, but stopped working in Vue3:个
<ul id="list">
<li v-for="t in dataArray"> {{t}} </li>
</ul>
<script>
var numbers = [1,2,3]; //this is my external array
var app = Vue.createApp({
data() { return { dataArray : numbers } } //bind Vue to my external array
}).mount("#list");
numbers.push(4); //UI not updating, but worked fine in Vue2
</script>
我知道我可以呼叫app.dataArray.push
,或者呼叫$forceUpdate
等,但有没有办法强制VUE只监视现有的数组?
我想更广泛的问题是:如何将Vue3绑定到任意的普通JS对象?对象可能太复杂而无法重写,也可能来self 无法控制的外部API.这在Vue2或Angular 中是微不足道的(与任何普通对象的双向绑定,无论它是否属于实例/组件)
附注:这看起来像是Vue3的一个巨大的突破性变化,在任何地方都没有提到.
UPDATE:个
根据a@Dimava的回答,修复上述代码的最不痛苦的方法似乎是:
var numbers = [1,2,3]; //this is my external array
numbers = Vue.shallowReactive(numbers); //convert to a reactive proxy