修身养性,知行合一

  • 首页
  • 爱码
    • 系统
    • 数据库
    • JavaScript
    • CSharp
    • Python
  • 生活
    • 文化
    • 美食
  • 杂谈
  • 关于
修身养性,知行合一
码字,杂谈
  1. 首页
  2. 爱码
  3. 前端
  4. JavaScript
  5. Vue
  6. 正文

关于 vue3 的 onMounted 获取不到 ref

2024年1月2日 2342点热度 0人点赞 0条评论

在 Vue 中,onMounted 钩子函数会在组件被挂载到 DOM 后立即调用。然而,如果在父组件的 onMounted 钩子函数中尝试获取子组件的 DOM 元素,可能会遇到问题,因为子组件可能还没有完成挂载。

如果需要在父组件的 onMounted 钩子函数中获取子组件的 DOM 元素,你可以使用 nextTick() 方法。nextTick() 方法会在下一次 DOM 更新循环结束之后延迟执行回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

以下是一个示例:

import { nextTick } from 'vue';

onMounted(() => {
  nextTick(() => {
    // 在这里获取 DOM 元素
    init();
  });
});

在上面的代码中,我们在 onMounted 钩子函数中使用了 nextTick() 方法来延迟执行 init 函数。这样,当 init 函数被调用时,子组件的 DOM 元素应该已经被挂载到 DOM 中,此时应该能够获取到它们。

当然,如果不确定下一次一定会获取到它们,还可以使用我喜欢的终极方案 watch:

onMounted(() => init()) // 正常加载
watch(toRef(elRef), () => init()); // 如果绑定的 ref 元素发生了变化,则会加载 init

在这里,通过监听 elRef 元素的变化,来执行 init 方法。因为 watch 是惰性监听,仅在监听源发生变化时才会执行,所以不用担心第一次绑定时会在 onMounted 和 watch 中触发两次 init。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: vue
最后更新:2024年1月2日

jeremyjone

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

最新 热点 随机
最新 热点 随机
node-sass 的安装 解决端口被占的问题 vue3 组件 Props 的声明方式 给 div 添加选中状态 请求的取消 rgb 颜色小数兼容问题
前端优化的几个点 ASP 获取站点根目录 关于 *.vue 文件中使用 TypeScript 声明类型报错的解决方案 真丶深入理解 JavaScript 原型和原型链(三):继承 docker 自动更新 微信小程序 - BILIBILI-demo

(っ•̀ω•́)っ✎⁾⁾ 开心每一天

COPYRIGHT © 2021 jeremyjone.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

京ICP备19012859号-1

京公网安备 11010802028585号