vue3使用ref获取dom结果为'null'的原因详析

 更新时间:2023年07月20日 16:10:17   作者:进击的potato  
这篇文章主要给大家介绍了关于vue3使用ref获取dom结果为'null'的原因详析,ref是Vue3中一个非常重要的功能,它可以用来获取DOM节点,从而实现对DOM节点的操作,需要的朋友可以参考下

在vue2中,我们使用ref获取dom元素时是这样子的:

// 父组件
<template>
  <div>
    <button @click=handleClick>我装载了一个子组件!</button>
    <son ref="dataList"></son>
  </div>
</template>
<script>
import son from './data.vue'
export default {
  components: {
    son
  },
  methods:{
    handleClick(){
      console.log(this.$refs.dataList)  //像这样!
    }
  }
}
</script>

在vue3中,我们使用ref获取dom元素时是这样子的:

// 父组件
<template>
  <button @click=handleClick>我装载了一个子组件!</button>
  <son ref="dataList"></son>
</template>
<script>
import {ref} from 'vue'
import son from './data.vue'
export default {
  setup(){
    const dataList=ref(null)
    const handleClick=()=>{
      console.log(dataList.value)  //像这样!
    }
    return{
      dataList //这里要抛出响应式数据才可使用。
    } 
  }
}
</script>

下面来说说vue3中获取dom为空的原因:

1.setup的return中应该抛出ref封装的字段,否则ref的值只是定义了并不能响应式使用,事实上,所有ref或者reactive定义的值都应在return中抛出。

2.直接在setup()中打印。这就是生命周期的问题了,setup本质上相当于vue2中的created,在创建阶段,dom元素还未完全创建完成,此时获取dom自然为null了。上面的例子中我是在点击按钮中触发的,此时早已经过创建阶段,如果你想更早,可以手动定义onMented去打印,如下:

import {ref,onMented} from 'vue'
export default {
  setup(){
    const dataList=ref(null)
    onMented(()=>{
      console.log(dataList.value)  //像这样!
    })
    return{
      dataList 
    } 
  }
}

3.如果你在使用时出现ref.value取不到子组件里的值,或者报错ref.value对象为空的情况,那是因为子组件要把能够被负组件调用的方法暴露出来,在子组件里加上defineExpose就可以啦。

defineExpose({
  onOpen  //这是你要调用的方法名
});

总结

到此这篇关于vue3使用ref获取dom结果为'null'的原因详析的文章就介绍到这了,更多相关vue3 ref获取dom结果为null内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Vue函数式组件-你值得拥有

    Vue函数式组件-你值得拥有

    这篇文章主要介绍了Vue函数式组件及vue函数式组件的优缺点,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • vue如何使用driver.js实现项目功能向导指引

    vue如何使用driver.js实现项目功能向导指引

    driver.js 是一个轻量级、无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的、高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器,这篇文章主要介绍了vue如何使用driver.js实现项目功能向导指引,需要的朋友可以参考下
    2023-03-03
  • vue this.$router六种方法使用示例总结分析

    vue this.$router六种方法使用示例总结分析

    这篇文章主要为大家介绍了vue this.$router六种方法使用示例总结分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue elementUI 表单校验功能之数组多层嵌套

    vue elementUI 表单校验功能之数组多层嵌套

    这篇文章主要介绍了vue elementUI 表单校验(数组多层嵌套)功能的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-06-06
  • uniapp和vue的区别详解

    uniapp和vue的区别详解

    这篇文章主要介绍了uniapp和vue的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • 在 Vue 中控制表单输入方法详解

    在 Vue 中控制表单输入方法详解

    这篇文章主要介绍了在 Vue 中控制表单输入方法详解的相关资料,需要的朋友可以参考下
    2023-04-04
  • Vue3快速diff算法的处理过程

    Vue3快速diff算法的处理过程

    传统的 DOM 更新方法会在有新旧子节点时卸载旧节点并挂载新节点,这种方法没有考虑到节点的复用可能性,diff 算法通过比较新旧节点的差异来复用节点,从而优化性能,本文给大家介绍了Vue3快速diff算法的处理过程,需要的朋友可以参考下
    2024-05-05
  • 在vue中使用Autoprefixed的方法

    在vue中使用Autoprefixed的方法

    这篇文章主要介绍了在vue中使用Autoprefixed的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Vue.js进行查询操作的实例详解

    Vue.js进行查询操作的实例详解

    这篇文章主要介绍了Vue.js进行查询操作的实例详解的相关资料,需要的朋友可以参考下
    2017-08-08
  • 一文学会什么是vue.nextTick()

    一文学会什么是vue.nextTick()

    这篇文章主要介绍了一文学会什么是vue.nextTick(),下面文章围绕主题的相关资料展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04

最新评论