uni-app hbuilderX vue3 元素或组件实例的引用ref无效,加载页面后打印组件实例为null

uni-app hbuilderX vue3 元素或组件实例的引用ref无效,加载页面后打印组件实例为null

开发环境 版本号 项目创建方式
Mac macos 11.6.1 HBuilderX

操作步骤:

<template>   
  <div ref="root">This is a root element</div>  
</template>  

<script>  
  import { ref, onMounted } from 'vue'  

  export default {  
    setup() {  
      const root = ref(null)  

      onMounted(() => {  
        // DOM 元素将在初始渲染后分配给 ref  
        console.log(root.value) // <div>This is a root element</div>  
      })  

      return {  
        root  
      }  
    }  
  }  
</script>

更多关于uni-app hbuilderX vue3 元素或组件实例的引用ref无效,加载页面后打印组件实例为null的实战教程也可以访问 https://www.itying.com/category-93-b0.html

40 回复

遇到了同样的问题。看来是还没有解决呢啊。

应该还是暂时只支持 vue2 中使用 ref 引用组件吧

更多关于uni-app hbuilderX vue3 元素或组件实例的引用ref无效,加载页面后打印组件实例为null的实战教程也可以访问 https://www.itying.com/category-93-b0.html


分享下自己的解决办法:

使用 vue2 写法
使用 vue3,通过getCurrentInstance 拿到实例,进而拿到 instance.refs 或 instance.ctx.$refs 或 instance.proxy.$refs(setup 中获取实例,函数中获取 ref)

现在的版本貌似是解决了,可以按照vue3官方的写法了,朋友可以测试测试

回复 1***@139.com: APP还是不行,已经升级到7月27号版本了

回复 9***@qq.com: 是的我就是 app

在快手和抖单小程序上,getCurrentInstance都返回空

回复 1***@139.com: 2024了为啥我的小程序还是不行…

回复 1***@qq.com: Me too

问题已记录,后续会优化,已加分,感谢您的反馈!

请问 大概什么时候能优化好哈

可以更新至最新的HBuilderX Alpha 注意事项:小程序端仅支持对自定义组件使用ref

自定义组件好像也不太行呢

回复 1***@qq.com: 单独发问题,发测试工程

回复 DCloud_UNI_FXY: 注意事项:小程序端仅支持对自定义组件使用ref 请问小程序要如何调用原生组件的方法呢?

回复 幺叁叁: 举实际的例子说明

回复 DCloud_UNI_FXY: vue3 script中 const showRight = ref(null); template 中使用的uni-drawer <uni-drawer ref="showRight" mode="right"></uni-deawer> dev到小程序编辑器 在小程序编辑器中控制台打印 showRight.value 值为null,打印showRight 值为RefImpl 对象,问题是RefImpl  对象中有value 属性,但是打印出来是null

我也遇到同样的问题,vue3中,获取不到template ref 的值,还是初始定义的null值,ref用在自定义组件上的

发测试工程

@DCloud_UNI_FXY 运行到谷歌Chrome浏览器Vue3环境可以获取到template ref, 运行到微信小程序开发工具Vue3环境不能获取到template ref,如果是使用vue2 的option api 方式,也即是在methods中可以获取到template ref。 以上,烦请技术大佬帮忙看看,完整工程文件已放在附件中,谢谢!

你给的代码没法直接运行,要求直接运行的代码

那意思就是,如果要写小程序。。。 需要去获取dom元素时,那就不能用uniapp的vue3版本??

小程序不提供dom操作,vue2版本也不支持

回复 DCloud_UNI_FXY: 那类似这种应该咋写呢??echarts这种明显需要init绑定一个dom呀

回复 王子虾: 可以在插件市场 https://ext.dcloud.net.cn/ 搜索跨平台的图表插件

3.0.0-3060520221121001 版本出现了这个问题 在 <script setup> 中 使用如下代码 unpaidList.value是个空 // 模板 <UnpaidListVue ref="unpaidList" /> const unpaidList = ref(null)
function test(){
unpaidList.value.getList()
} 这样写可以 function test(){
unpaidList.value && unpaidList.value.getList(patient.value)
}

emmmm请忽略 是其他问题

目前快手抖音小程序还有同样问题

我也遇到了同样的问题,请问博主解决了嘛

说清楚HBuilderX什么版本,发行到什么平台。

我也遇到这个问题了 版本:3.0.0-4060620250520001

3.0.0-3071120230427001我也遇到一样的问题,麻

回复 代号: 3.0.0的版本?这是2年前的版本了,赶紧升级到最新版试一下。

2025年06-17 问题不能彻底解决吗? 还是 说 修改别的问题 又影响到这里来了,微信小程序 自定义组件 uniapp vue3 ref null 问题. 引入 的一个组件 可以。这个 是 自动引入的 不行

直接 在 onMounted 写 request 请求 ,并给自定义组件 赋值 ,然后 就好了 前面是写 在 onLaod 里面 就 不行 ref 是 null

onLoad 节点还没有,肯定获取不到。

奇奇怪怪的, 非要我点一下切换的按钮 ,才可以获取,初始化进来就获取不到。

请问你解决了吗?

回复 Symbol_Yang: 使用延迟函数 给 示例变量重新赋值给另外一个变量!

在 Vue 3 的 Composition API 中,使用 ref 获取组件实例或 DOM 元素时,确保在 setup 函数中正确声明并返回 ref 对象。根据你提供的代码,逻辑本身是正确的,但 uni-app 环境下可能存在一些特殊情况导致 refnull

常见原因及解决方案:

  1. 模板渲染时机问题onMounted 钩子触发时,DOM 可能尚未完全渲染。可以尝试使用 nextTick 确保 DOM 更新完成后再访问 ref

    import { ref, onMounted, nextTick } from 'vue'
    onMounted(() => {
      nextTick(() => {
        console.log(root.value) // 此时应能正确获取
      })
    })
    
  2. 条件渲染导致 ref 未绑定:如果元素被 v-ifv-show 控制,初始渲染时可能不存在。检查模板中是否有条件渲染逻辑。

  3. HBuilderX 版本或 Vue 3 兼容性:确保 HBuilderX 为最新版本(建议使用正式版),并检查项目配置中 Vue 3 模式已正确启用。在 manifest.json 中确认已配置 "vueVersion": "3"

  4. 作用域问题:在 setup 中声明的 ref 必须返回给模板,你的代码已正确返回 root,但需确保没有其他同名变量覆盖。

  5. 使用 getCurrentInstance 调试:可以尝试通过 getCurrentInstance 获取当前实例,检查组件上下文。

    import { getCurrentInstance, onMounted } from 'vue'
    onMounted(() => {
      const instance = getCurrentInstance()
      console.log(instance.refs) // 查看 refs 对象
    })
回到顶部