1. 作用
同时监听多个属性
2. 用法
2.1 开启 watchEffect 监听
<template>
<input type="text" v-model="val.person.name">
<input type="text" v-model="val.person.age">
</template>
<script setup lang="ts">
import { reactive, watchEffect } from 'vue'
let val = reactive({
person: {
name: 'lzy',
age: 18
}
})
watchEffect(() => {
console.log('name', val.person.name)
console.log('age', val.person.age)
})
</script>
2.2 回调触发最初时,需要执行某些操作
可以接收一个 oninvalidate 回调,会在监听触发之后、其它代码执行之前执行
const stop = watchEffect((oninvalidate) => {
console.log('name', val.person.name)
console.log('age', val.person.age)
oninvalidate(() => {
console.log("before")
})
})
2.3 停止 watchEffect 监听
<template>
<input type="text" v-model="val.person.name">
<input type="text" v-model="val.person.age">
<hr>
<button @click="stopWatch">停止监听</button>
</template>
<script setup lang="ts">
import { reactive, watchEffect } from 'vue'
let val = reactive({
person: {
name: 'lzy',
age: 18
}
})
const stop = watchEffect((oninvalidate) => {
console.log('name', val.person.name)
console.log('age', val.person.age)
oninvalidate(() => {
console.log("before")
})
})
const stopWatch = () => stop()
</script>
2.4 第二个参数的一些配置项
flush:
pre - 组件更新之前触发
sync - 同步触发
post - 组件更新之后触发
<template>
<input type="text" id="ipt">
</template>
<script setup lang="ts">
import { watchEffect } from 'vue'
watchEffect(() => {
let ipt = document.querySelector("#ipt")
console.log(ipt)
}, {
})
</script>