总结代码:
一进页面就开始监听
<template><div>数量——{{ count }}</div><div>姓名——{{ nickname }}</div><button @click="changecount">+</button><button @click="changenickname">改名</button><div>姓名:{{ userInfo.name }}</div><div>年龄:{{ userInfo.age }}</div><button @click="changeusername">改对象名</button><button @click="changeuserage">改年龄</button><button @click="stop()">停止监听</button>
</template>
<script setup>
import { ref, watch, watchEffect } from 'vue';
const count = ref(0) //数量
const nickname = ref('张三')//姓名
// 对象
const userInfo = ref({name: 'zs',age: 18
})
// 改数量
const changecount = () => {count.value++
}
// 改姓名
const changenickname = () => {nickname.value = '李四'
}
// 改对象姓名
const changeusername = () => {userInfo.value.name = '李四'
}
// 改对象年龄
const changeuserage = () => {userInfo.value.age = '20'
}// 使用watchEffect监听 一进页面就监听
const stop = watchEffect(() => {console.log('数量:', count.value);console.log('姓名:', nickname.value);console.log('对象单个数据:', userInfo.value.name);console.log('整个对象变化:', JSON.stringify(userInfo.value));oninvalidata(() => {console.log('监听前处理一些事情');})
});
</script>
获取监听dom元素
<div ref="numcom">数量——{{ count }}</div>
使用flush获取dom元素 post:dom加载完获取
// 使用watchEffect监听
const stop = watchEffect((oninvalidata) => {console.log(numcom.value);oninvalidata(() => {console.log('监听前处理一些事情');})
}, {flush: 'post'
});