vue3同一页面内重复引用同一操作dom的组件产生的问题
2023年8月28日12:39:40
vue3同一页面内标签<component>
重复引用同一组件,且该组件内使用css选择器进行dom操作导致页面内相同组件发生变化的问题解决记录
组件内进行dom操作,需要通过js方法进行选择器的元素获取,但当vue3全部渲染完毕后,页面内有多个id为test9的相同元素,元素选择将变得模糊,如下:
document.querySelectorAll('#test9 table tbody')[0]
解决办法是把上面的js方式改成ref进行引用,并在异步加载该组件时进行markRaw,标记组件为非响应式,提高渲染性能
// 组件内
<template>
......
<tbody ref="tbody">
...
</tbody>
</template>
<script>
// 用 tbody.value去做dom操作
const tbody = ref<any>(null)
</script>
// 多次引用该组件的父级页面
<template>
......
// v-for循环
<component
:is="getComponent('组件名')"
class="grow"
/>
</template>
<script>
function getComponent(name: string): Component {
return markRaw(defineAsyncComponent(import.meta.glob('src/component/*.vue')[`src/component/${name}.vue`]))
}
</script>
总结:个人认为ref类似组件的data,是相互隔离独立的
本文作者:邪妖怪
本文链接:https://www.cnblogs.com/lastkiss/p/17662009.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步