vue3中 dom 组件更新无法触发 watch?
问题:我通过给 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>
回复
1个回答
test
2024-07-06
vue3 并不能使用watch 来观察DOM,先不说不能直接侦听响应式对象的属性值,但是DOM对象即便你加了deep也不可以,在源码中可以看到
DOM对象在这里已经被忽略了
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容