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.js之render函数使用详解

    Vue.js之render函数使用详解

    这篇文章主要介绍了Vue.js之render函数使用详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Vue引入Stylus知识点总结

    Vue引入Stylus知识点总结

    在本篇文章里小编给各位整理的是一篇关于Vue引入Stylus知识点总结内容,有需要的朋友们可以学习参考下。
    2020-01-01
  • Vue.js添加组件操作示例

    Vue.js添加组件操作示例

    这篇文章主要介绍了Vue.js添加组件操作,结合实例形式分析了vue.js组件的注册、调用相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 策略模式实现 Vue 动态表单验证的方法

    策略模式实现 Vue 动态表单验证的方法

    策略模式(Strategy Pattern)又称政策模式,其定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。这篇文章主要介绍了策略模式实现 Vue 动态表单验证,需要的朋友可以参考下
    2019-09-09
  • 使用vue根据状态添加列表数据和删除列表数据的实例

    使用vue根据状态添加列表数据和删除列表数据的实例

    今天小编就为大家分享一篇使用vue根据状态添加列表数据和删除列表数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue中事件总线(eventBus)的深入详解及使用

    Vue中事件总线(eventBus)的深入详解及使用

    在vue项目中父子组件间的通讯很方便,但兄弟组件或多层嵌套组件间的通讯,就会比较麻烦,这时使用eventBus通讯,就可以很便捷的解决这个问题,这篇文章主要给大家介绍了关于Vue中事件总线(eventBus)使用的相关资料,需要的朋友可以参考下
    2022-03-03
  • axios向后台传递数组作为参数的方法

    axios向后台传递数组作为参数的方法

    今天小编就为大家分享一篇axios向后台传递数组作为参数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue做移动端适配最佳解决方案(亲测有效)

    vue做移动端适配最佳解决方案(亲测有效)

    这篇文章主要介绍了vue做移动端适配最佳解决方案(亲测有效),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue click事件传递参数的示例教程

    Vue click事件传递参数的示例教程

    这篇文章主要介绍了Vue click事件传递参数--方法/教程/实例,本文用示例介绍Vue中事件传参的方法,采用click这个事件进行展示,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue-cli4.x创建企业级项目的方法步骤

    vue-cli4.x创建企业级项目的方法步骤

    这篇文章主要介绍了vue-cli4.x创建企业级项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论