Vue3 中 watch 语法对于数组和对象监听的小问题
监听数组,需要使用 watch(() => [...arr], (newValue,oldValue) => { ... })
的方式
添加和删除数据可以正常获得newValue,oldValue的值
对于数组中数据的修改,如果是一维简单数组,可以正常获得newValue,oldValue的值
查看代码
const app = Vue.createApp({
setup() {
const arr = Vue.reactive([
1,2,3
])
Vue.watch(() => arr, (newValue,oldValue) => {
console.log(newValue, oldValue);
console.log('arr changed')
})
return {
arr
}
},
methods: {
arrPush() {
this.arr.push(1)
},
arrChange(){
this.arr[0]++
},
arrSplice(){
this.arr.splice(0,1)
}
}
})
app.mount('#app')
对于对象数组,需要添加 {deep:true}
参数才能正常监听,并且得到的newValue,oldValue的值是一样的
查看代码
const app = Vue.createApp({
setup() {
const arr = Vue.reactive([
{
name: '张三',
age: 18
},
{
name: '李四',
age: 20
},
{
name: '王五',
age: 22
}
])
Vue.watch(() => [...arr], (newValue, oldValue) => {
console.log(newValue, oldValue);
console.log('arr changed')
}, { deep: true })
return {
arr
}
},
methods: {
arrPush() {
this.arr.push({
name: '赵六',
age: 23
})
},
arrChange() {
this.arr[0].age++
},
arrSplice() {
this.arr.splice(0, 1)
}
}
})
app.mount('#app')
对象可以直接使用watch监听,可惜得到的newValue,oldValue的值仍然是一样的
查看代码
const app = Vue.createApp({
setup() {
const arr = Vue.reactive({
name: '张三',
age: 18
})
Vue.watch(arr, (newValue,oldValue) => {
console.log(newValue,oldValue);
console.log('arr changed')
})
return {
arr
}
},
methods: {
arrPush() {
this.arr.id = 1
},
arrChange(){
this.arr.age++
},
arrSplice(){
delete this.arr.id
}
}
})
app.mount('#app')
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/16358007.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2015-06-09 smarty模板引擎中section循环loop与total的区别