Vue 的官方网站给出了如下解释:
解决办法,是在 computed 做浅拷贝或深拷贝(按实际需求来,比如监听一个由多个对象组成的数组时,可使用深拷贝),同时在 watch 加上 deep: true 设置。
例子:
watch: {
messageData(newVal, oldVal) {
console.log("newVal", newVal)
console.log("oldVal", oldVal)
},
deep: true
},
computed: {
messageData() {
return [...this.messageList]
// 或者是一个深拷贝函数,如类似 return Util.deepCopy(this.message) 这样的
}
}