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;
});

最新文章

  1. redis3.0配置文件详解
  2. error-2016-2-15
  3. 分享Db4o的便捷封装类源码
  4. Go 模板
  5. WPF下载远程文件,并显示进度条和百分比
  6. Java 集合类详解(含类图)
  7. 让你的PHP更安全之PHP.ini
  8. thickbox关闭子页后ajax局部刷新父页
  9. #include &lt;windows.h&gt;
  10. [NOI 2010]能量采集
  11. 安卓高级4 第三方库SlidingMenu的使用
  12. 2、订单填写页面 /items/write?skuId=10&amp;orderNo=201903211033410001
  13. CentOS6.5优化脚本以及检测优化脚本
  14. centos中yum命令删除还原的补救方法介绍
  15. [CF1067D]Computer Game[凸包/斜率优化+倍增+矩阵乘法]
  16. springBoot配置文件application.properties
  17. 雷林鹏分享:JSP 简介
  18. Android-自定义控件之事件分发
  19. 对SVM的个人理解---浅显易懂
  20. 2015/9/17 Python基础(13):函数

热门文章

  1. 【极客时间】大数据概述及HDFS介绍
  2. Spring框架之IOC入门
  3. 填坑日志-云网络智慧课堂双网卡Mac地址读取错误的问题及解决
  4. 想做长期的 AB 实验?快来看看这些坑你踩了没
  5. Javascript | 模拟mvc实现点餐程序
  6. 如何查看计算机的CPU信息
  7. 教你用JavaScript实现乘法游戏
  8. Scrapy爬虫框架快速入门
  9. MySQL 插入数据 数据重复 从另一个表导入数据
  10. docker配置阿里云加速