当前位置:   article > 正文

Vue3中组合API-watch函数_vue2中watch 监控一个函数,在vue3组合式api 中怎么写

vue2中watch 监控一个函数,在vue3组合式api 中怎么写

           当需要侦听一些信息的变化时, 需要用到watch侦听器,当被侦听的信息变化时,触发侦听器的回调函数

典型的场景:路由的参数发生变化时,重新调用接口获取组件的数据

1、侦听ref定义的响应式数据

  1. <template>
  2. <div> 侦听器 <div>
  3. <div>{{count}}</div>
  4. <button @click='count+=1'>点击+1</button>
  5. </template>
  6. <scirpt>
  7. import { ref,watch } from 'vue'
  8. export default {
  9. name:'App',
  10. setup(){
  11. const count =ref(0)
  12. watch(count,(newValue,oldValue)=>{
  13. console.log(newValue,oldValue)
  14. })
  15. return { count }
  16. }
  17. }
  18. </script>

输出的结果:

页面初始渲染的数据

点击+1按钮以后,页面的变化以及watch侦听到的数据的变化打印的newValue和oldValue

 2、侦听reactive定义的响应式数据

侦听对象

  1. <template>
  2. <div> 侦听器 <div>
  3. <button @click='hClick'>点击</button>
  4. </template>
  5. <scirpt>
  6. name:'App',
  7. setup(){
  8. const obj = reactive({
  9. msg:'tom'
  10. })
  11. watch(obj,(newValue,oldValue)=>{
  12. console.log(obj,newValue,oldValue)
  13. })
  14. const hClick=()=>{
  15. obj.msg='jerry'
  16. }
  17. return { count,obj,hClick}
  18. }
  19. </script>

打印出来的结果

总结:如果侦听对象,那么侦听器的回调函数的两个参数是一样的结果,表示最新的对象数据,此时,也可以直接读取被侦听的对象,那么得到的值也是最新的 

同样,数组也一样,如果侦听的是数组,那么侦听器得到的回调函数的两个参数一样的结果,都表示最新的数组数据

如果想要得要没有改变之前的旧值,那么在侦听的时候可以将对象或者数组拷贝一下,就不会改变最初的值

  1. watch(()=>{ return {...obj}},(newValue,oldValue)=>{})
  2. watch(()=>{ return [...arr],(newValue,oldValue)=>{})

 3、侦听多个数据

  1. <template>
  2. <button @click='hClick'> 点击</button>
  3. </template>
  4. <scirpt>
  5. import {ref} from 'vue'
  6. export default{
  7. const n1=ref(1)
  8. const n2=ref(2)
  9. watch([n1,n2],(v1,v2)=>{
  10. // v1、v2都是数组
  11. // v1表示被监听的所有值的最新值
  12. // v2表示被监听的所有值的原有值
  13. console.log(v1,v2)
  14. })
  15. const hClick=()=>{
  16. n1.value=3
  17. n2.value=34
  18. }
  19. return { n1,n2,hClick}
  20. }
  21. </sccript>

 打印的结果

 4、监听reactive定义的响应式数据的某一个属性

  1. <template>
  2. <button @click='hClick'>点击</button>
  3. </template>
  4. <scirpt>
  5. import {reactive,watch} from 'vue'
  6. setup(){
  7. const stuInfo =reactive({
  8. uname:'lisi',
  9. age:12
  10. })
  11. watch(()=>stuInfo.age,(v)=>{
  12. console.log(v)
  13. })
  14. const hClick=()=>{
  15. stuInfo.age=13
  16. }
  17. retuen { hClick,stuInfo }
  18. }
  19. </scirpt>

如果侦听对象中的某个属性,需要用函数方式,监听更少的属性有利于提高性能

5、配置选项用法

watch的配置选项,

immediate:true  表示组件渲染之后,立即触发一次

deep:true  表示深度侦听对象里面的子属性,被侦听的内容需要是函数的写法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/69701?site
推荐阅读
相关标签
  

闽ICP备14008679号