Vue 使用 watch 监听对象和数组时,新值与旧值相同的原因及解决办法

880 阅读1分钟

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) 这样的
    }
}