当前位置: 首页 > news >正文

vue3 数据监听(watch、watchEffect)

1、watch

1.1基本使用

作用:数据监听

语法:

watch(监听的数据, (改变后的数据, 改变前的数据) => {

console.log(newVal, oldVal);

})

注意点:watch写法上支持一个或者多个监听源,这些监听源必须只能是getter/effect函数,ref数据,reactive对象,或者是数组类型

<template>
  <div>
    <h1>watch</h1>
    <p>name: {{ name }} <button @click="btn">修改名字</button></p>
    <p><input type="text" v-model="code" /> {{ code }}</p>
  </div>
</template>

<script setup>
import { ref,reactive,toRefs, watch } from 'vue';
  // 定义变量
  let name=ref('张三')
  const btn=()=>{
    name.value='李四'
  }
  // 监听单个数据
  watch(name,(newVal,oldVal)=>{
    //            李四 张三
    console.log(newVal,oldVal);
  })
  // 定义对象
  let res=reactive({
    code:200,
    data:[],
    massge:'ok'
  })
  const {code}=toRefs(res)
  // 监听对象
  watch(()=>res.code,(newVal,oldVal)=>{
    //            2001 200
    console.log(newVal,oldVal);
  })

  // 监听多个数据
  watch([name,()=>res.code],(newVal,oldVal)=>{
    //['张三', '2001'] ['张三', 200]
    console.log(newVal,oldVal);
  })
</script>

1.2、深度监听、立即监听

关键字:

deep:true 深度监听

immediate:true 立即监听

<template>
  <div>
    <h1>watch</h1>
    <p><input type="text" v-model="res.user.name" /> {{ res.user.name }}</p>
  </div>
</template>

<script setup>
import { ref,reactive,toRefs, watch } from 'vue';
  // 定义对象
  let res=reactive({
    user:{
    	name:'张三'
    }
  })
  // 监听多个数据
  watch(()=>res.user,(newVal,oldVal)=>{
    console.log(newVal,oldVal);
  },
  {deep:true,immediate:true})
</script>

2、watchEffect

watchEffect用来简化 watch,不需要指定监听对象

而是根据函数内的依赖,用到了什么 当它发生变化时,自动触发

watchEffect回调会立即执行 不需要指定immediate

    <template>
        <div>
          <h1>watchEffect</h1>
          <p><input type="text" v-model.number="num1">
              <input type="text" v-model.number="num2">
          </p>
        </div>
      </template>

      <script setup>
      import { ref,watchEffect } from 'vue';
        let num1=ref(0);
        let num2=ref(1);

        watchEffect(()=>{
            console.log(num1.value+num2.value);
            console.log('执行啦watchEffect');
        })
      </script>
对比点watchwatchEffect
惰性有惰性,不设置就不会立即执行没有惰性,会立即执行
参数语法上多个参数不需要传递参数
获取值可以获取到新旧值不能获取到新旧值

相关文章:

  • 【前端】原生项目与框架项目区别
  • 每天认识一个设计模式-建造者模式:复杂对象的“装配式革命“
  • rabbitmq承接MES客户端服务器
  • React Native集成到原生iOS应用中
  • Keysight ADS教学 - 一维二維參數掃描(parameter sweep)
  • Appium Inspector使用教程
  • [算法笔记]一段数量变化的无序区间的中位数查找--双堆法
  • RabbitMQ 核心组件及功能详解
  • tar包部署mongo
  • 登录时图形校验
  • openstack连接云主机
  • MATLAB 控制系统设计与仿真 - 29
  • Java性能调优实战指南:从理论到实践
  • Linux 搭建dns主域解析,和反向解析
  • 联核防爆无人叉车:高危环境中的安全搬运守护者
  • Sentinel 限流利器(功能以及源码解析)
  • JavaScript的性能优化指导
  • 使用ucharts写的小程序,然后让圆环中间的空白位置变大
  • 低代码配置式组态软件-BY组态
  • 鸿蒙入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
  • 网站建设yankt/小红书搜索指数
  • 有企业信息的网站/网络营销推广策略有哪些
  • 做效果图网站/中国软文网官网
  • 娱乐网站开发spspwk/google推广 的效果
  • 东莞企业vi设计/快速排名优化
  • 微信网站如何开发/百度在线问答