Vue3 ref 模板引用获取不到节点
2024-10-21 10:04:19
ref
模板引用必须要在组件实例挂载完成之后才可以访问。如果你是在组合式 API 里面写的组件,那么 setup
函数比任何周期函数都早,所以不可能在该函数中执行时获取得到ref
——组件实例。
官网关于ref
获取组件实例有两个案例:onMounted、watchEffect 中获取 ref。其中 onMounted
有的说:
如果此时在setup
函数里写了一个异步函数,毫无疑问,该异步任务不影响组件执行周期函数,也就是说onMounted
确实能获取得到模板引用。但如果模板中某个节点是要获取了数据之后才更新 DOM,假如我需要的正是这个 DOM 的高度呢?有可能是 0,因为数据是异步的,而周期函数执行时间一般都快于异步函数的执行。
// setup
const todolist = ref(null);
const data = ref(await getData());
onMounted(() => {
todolist.value; // => null
});
<div ref="todolist">
<ul v-for="item in data">
<li>{{ item }}</li>
</ul>
</div>
针对于异步数据,onMounted
不行,那watchEffect
行不行呢?答案是当然可以,但是watchEffect
不管有没有等到 DOM 异步之后更新,都要执行,也就是它第一次可能是获取 null 值,所以也不合适。
const count = ref(0)
watchEffect(() => console.log(count.value))
// -> 输出 0,首先是立即执行,此时已经追踪其依赖,假如发生改变,该函数重新执行。
count.value++
// -> 输出 1,改变响应式数据,重新执行 watchEffect 回调。
最好的是使用watch
,监听ref
发生的变化,因为 DOM 更新,模板引用也会更新,但不会像watchEffect
那样,有可能第一次会得到一个 null 值:
// setup
const todolist = ref(null);
const data = ref(await getData());
watch(todolist, () => {
todolist.value;
});
最新文章
- redis3.0配置文件详解
- error-2016-2-15
- 分享Db4o的便捷封装类源码
- Go 模板
- WPF下载远程文件,并显示进度条和百分比
- Java 集合类详解(含类图)
- 让你的PHP更安全之PHP.ini
- thickbox关闭子页后ajax局部刷新父页
- #include <;windows.h>;
- [NOI 2010]能量采集
- 安卓高级4 第三方库SlidingMenu的使用
- 2、订单填写页面 /items/write?skuId=10&;orderNo=201903211033410001
- CentOS6.5优化脚本以及检测优化脚本
- centos中yum命令删除还原的补救方法介绍
- [CF1067D]Computer Game[凸包/斜率优化+倍增+矩阵乘法]
- springBoot配置文件application.properties
- 雷林鹏分享:JSP 简介
- Android-自定义控件之事件分发
- 对SVM的个人理解---浅显易懂
- 2015/9/17 Python基础(13):函数