Vue3:监听属性

监听属性

  • 与vue2.x中的watch配置功能一致

  • 注意

    • 监视reactive定义的响应式数据时,oldvalue无法正确获取,强制开始了深度监视(deep的配置失效)

    • 监视reactive定义的响应式数据的某一个值时:deep配置有效

 

<template>
  <div class="home">
    <h1>{{num}}</h1>
    <h1>{{msg}}</h1>

    <button @click="num++">点击num++</button>
    <button @click="addmsg()">点击msg+!</button>
  </div>
</template>

<script>

// 注意:vue2.x和vue3.x不要混用
// 1.引入
import { watch, ref,reactive } from "vue"
export default {

  data() {
    return {

    }
  },
  computed: {
  },


  setup() {

    let num = ref(0);
    let msg = ref("hello");
    let person = reactive({
        name:"李国栋",
        age:18,
        more:{
            job:"前端开发工程师",
            salary:"12k"
        }
    })

    // 1.监听ref定义的响应式数据
    watch(num, (newvalue, oldvalue) => {
      console.log("num变量", newvalue, oldvalue);
    })


    // 2.监听多个ref定义的响应式数据
    watch([num, msg], (newvalue, oldvalue) => {
      console.log("msg数据变化了", newvalue, oldvalue);
    })

    let addmsg = () => {
      msg.value += "!"
    }
    
    
    //3.监听reactive所定义的一个响应式数据的全部属性
    //注意:此处无法正确的获取oldvalue
    //注意:并且强制开启了深度监视(deep配置无效)
    
    watch(person, (newvalue, oldvalue) => {
      console.log("person数据变化了", newvalue, oldvalue);
    },{deep:false})
      
    //4.监听reactive所定义的一个响应式数据的某一个属性
    watch(()=>person.name, (newvalue, oldvalue) => {
      console.log("person数据变化了", newvalue, oldvalue);
    },{deep:false})
   //()=>person.name  ()=>{return person.name}
return { num, msg, addmsg } } } </script>

 

posted on 2022-09-20 22:23  香香鲲  阅读(316)  评论(0编辑  收藏  举报