问题:
我通过给 dom 元素绑定 ref,来获取 DOM 元素,我想要在 dom 元素内容更新的时候,触发 watch,或者 watchEffect,我使用 { flush: "post" } 或者 不使用都无法在dom 元素内容改变的时候触发watch。
代码如下:
<script setup>
import {ref} from "vue"
const test = ref(null);
setTimeout(() => {
test.value.innerHTML = "wwwwwww";
}, 2000);
watchPostEffect(
() => {
console.log("textContent", test.value);
}
);
watch(
test,
(newValue, oldValue) => {
console.log("watch test", newValue, oldValue);
},
{ flush: "post" }
);
watchEffect(
() => {
console.log("textContent", test.value);
},
{ flush: "post" }
);
</script>
<template>
<div>
<div id="test" ref="test">哈哈哈哈哈哈</div>
</div>
</template>
vue3 并不能使用watch 来观察DOM,先不说不能直接侦听响应式对象的属性值,但是DOM对象即便你加了deep也不可以,在源码中可以看到
DOM对象在这里已经被忽略了