VUE3中watch监听使用实例详解

 更新时间:2022年06月07日 11:07:09   作者:莫循瑾木  
watch函数用来侦听特定的数据源,并在回调函数中执行副作用,下面这篇文章主要给大家介绍了关于VUE3中watch监听使用的相关资料,需要的朋友可以参考下

watch介绍

vue中watch用来监听数据的响应式变化.获取数据变化前后的值

watch的完整入参

watch(监听的数据,副作用函数,配置对象)
watch(data, (newData, oldData) => {}, {immediate: true, deep: true})

watch监听的不同情况

创建响应式数据

import { ref, watch, reactive } from "vue";
let name = ref("moxun");
let age = ref(18);
let person = reactive({
  Hobby: "photo",
  city: {
    jiangsu: {
      nanjing: "雨花台",
    },
  },
});

1 监听单个refimpl数据

watch(name, (newName, oldName) => {
  console.log("newName", newName);
});

2 监听多个refimpl数据

方式一:vue3允许多个watch监听器存在

watch(name, (newValue, oldValue) => {
  console.log("new", newValue, "old", oldValue);
});
watch(age, (newValue, oldValue) => {
  console.log("new", newValue, "old", oldValue);
});

方式二:将需要监听的数据添加到数组

watch([name, age], (newValue, oldValue) => {
  // 返回的数据是数组
  console.log("new", newValue, "old", oldValue);
});

3 监听proxy数据

注意

1.此时vue3将强制开启deep深度监听

2.当监听值为proxy对象时,oldValue值将出现异常,此时与newValue相同

// 监听proxy对象
watch(person, (newValue, oldValue) => {
  console.log("newValue", newValue, "oldValue", oldValue);
});

4 监听proxy数据的某个属性

需要将监听值写成函数返回形式,vue3无法直接监听对象的某个属性变化

watch(
  () => person.Hobby,
  (newValue, oldValue) => {
    console.log("newValue",newValue, "oldvalue", oldValue);
  }
);

注意

当监听proxy对象的属性为复杂数据类型时,需要开启deep深度监听

watch(
  () => person.city,
  (newvalue, oldvalue) => {
    console.log("person.city newvalue", newvalue, "oldvalue", oldvalue);
  },{
    deep: true
  }
);

5 监听proxy数据的某些属性

watch([() => person.age, () => person.name], (newValue, oldValue) => {
  // 此时newValue为数组
  console.log("person.age", newValue, oldValue);
});

总结

1.与vue2中的watch配置一致

2.两个坑:

监听reactive定义的proxy代理数据时
oldValue无法正确获取
强制开启deep深度监听(无法关闭)

监听reactive定义的proxy代理对象某个属性时deep配置项生效

到此这篇关于VUE3中watch监听使用的文章就介绍到这了,更多相关VUE3 watch监听使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue.js $refs用法案例详解

    Vue.js $refs用法案例详解

    这篇文章主要介绍了Vue.js $refs用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • vue.js根据图片url进行图片下载

    vue.js根据图片url进行图片下载

    最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,本文就介绍了vue.js根据图片url进行图片下载,感兴趣的可以了解一下
    2021-06-06
  • el autocomplete支持分页上拉加载使用详解

    el autocomplete支持分页上拉加载使用详解

    这篇文章主要为大家介绍了el autocomplete支持分页上拉加载使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • vue中使用svg封装全局消息提示组件

    vue中使用svg封装全局消息提示组件

    这篇文章主要为大家详细介绍了vue中使用svg封装全局消息提示组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue项目动态设置页面title及是否缓存页面的问题

    vue项目动态设置页面title及是否缓存页面的问题

    这篇文章主要介绍了vue项目动态设置页面title及是否缓存页面的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • vue实现防抖的实例代码

    vue实现防抖的实例代码

    这篇文章主要给大家介绍了关于vue实现防抖的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • vue.js中window.onresize的超详细使用方法

    vue.js中window.onresize的超详细使用方法

    这篇文章主要给大家介绍了关于vue.js中window.onresize的超详细使用方法,window.onresize 是直接给window的onresize属性绑定事件,只能有一个,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • vue3日历控件的具体实现

    vue3日历控件的具体实现

    日历在很多地方都可以使用的到,本文主要介绍了vue3日历控件的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • vue项目中引入vue-datepicker插件的详解

    vue项目中引入vue-datepicker插件的详解

    这篇文章主要介绍了vue项目中引入vue-datepicker插件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue-element-admin登录拦截设置白名单方式

    vue-element-admin登录拦截设置白名单方式

    这篇文章主要介绍了vue-element-admin登录拦截设置白名单方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论