vue3使用ref获取dom结果为‘null’

这篇具有很好参考价值的文章主要介绍了vue3使用ref获取dom结果为‘null’。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在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中抛出。

  1. 直接在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 
    } 
  }
}
  1. 如果你在使用时出现ref.value取不到子组件里的值,或者报错ref.value对象为空的情况,那是因为子组件要把能够被负组件调用的方法暴露出来,在子组件里加上defineExpose就可以啦。文章来源地址https://www.toymoban.com/news/detail-519857.html

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

到了这里,关于vue3使用ref获取dom结果为‘null’的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 setup 通过ref访问dom元素

    2024年02月15日
    浏览(34)
  • 【Vue3】vue3通过ref获取元素离顶部的距离

    vue3版本 ^3.2.45 [ref].value.$el.getBoundingClientRect().top 通过ref获取元素。 使用 getBoundingClientRect().top 获取离顶部的距离 homeView.vue

    2024年02月15日
    浏览(37)
  • vue3创建和获取循环动态ref

    定义如下: 然后在需要循环赋值ref的元素上使用setRef,具体如下 此时每个元素的值便都存boxRefs数组中了,使用方法和使用数组无异,如下

    2024年02月16日
    浏览(30)
  • vue3中ref获取子组件的值

    一、 script setup 通过ref获取子组件的值或方法 父组件: 子组件: 二、setup()通过ref获取子组件值 父组件: 子组件:

    2024年02月16日
    浏览(28)
  • uniapp中开发小程序使用ref获取dom实例,一直显示undefined,竟然发现是这个原因!

    小程序是不能使用getElementById之类的dom api,所以考虑使用ref来获取dom元素,但事实上并不是如此,绑定ref后并没有输出我想要的dom元素。 既然console.log(this.$refs.iRef)为undefined,会不会this.$refs也是undefined?然而this.$refs是有值的,就是没有iRef,那么到底是为什么? 会不会是需要

    2024年02月11日
    浏览(33)
  • vue3 ts获取组件 ref元素的值

    在 Vue 3 + TypeScript 中,要获取组件 ref 元素的值,可以通过 ref 函数创建一个 ref,并将其绑定到组件的 ref 属性上。然后,可以通过访问 ref 的 .value 属性来获取该组件的实例。 以下是一个示例代码: 在上述代码中,我们首先使用 ref 函数创建了一个名为 childComponentRef 的 ref,并

    2024年02月05日
    浏览(36)
  • vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

    正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。 但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。 那么,这时我们需要动

    2024年02月13日
    浏览(39)
  • uniapp小程序vue3获取dom实例createSelectorQuery

    需求,在页面中,有时需要获取渲染组件的长宽信息,可以使用 select 选择器进行查询,直接上代码如下:

    2024年02月16日
    浏览(38)
  • 29 - ref 和 $refs 获取dom和组件

    作用: 利用 ref  和 $refs 可以用于 获取 dom 元素 , 或 组件实例 特点: 查找范围 - 当前组件内(更精确稳定) 1. 获取 dom:         (1). 目标标签 - 添加 ref属性         (2). 恰当时机,通过this.$refs.xxx,获取目标标签         代码示例:   2. 获取组件         (1). 目标组件 - 添加 r

    2024年02月11日
    浏览(28)
  • 解决vue3+echarts关于无法获取dom宽度和高度的问题

    近期写vue3项目,很多地方都用到了echarts,刚开始写的时候,发现图一直出不来,报错/报警内容一般有两项: Uncaught (in promise) Error: Initialize failed: invalid dom. vue3 [ECharts] Can’t get DOM width or height. 分别解释一下这俩报错 第一个报错是在初始化echarts的时候,没有找到对应的dom元素

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包