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
遇到了同样的问题。看来是还没有解决呢啊。
应该还是暂时只支持 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了为啥我的小程序还是不行…
请问 大概什么时候能优化好哈
可以更新至最新的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-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 环境下可能存在一些特殊情况导致 ref 为 null。
常见原因及解决方案:
-
模板渲染时机问题:
onMounted钩子触发时,DOM 可能尚未完全渲染。可以尝试使用nextTick确保 DOM 更新完成后再访问ref。import { ref, onMounted, nextTick } from 'vue' onMounted(() => { nextTick(() => { console.log(root.value) // 此时应能正确获取 }) }) -
条件渲染导致 ref 未绑定:如果元素被
v-if或v-show控制,初始渲染时可能不存在。检查模板中是否有条件渲染逻辑。 -
HBuilderX 版本或 Vue 3 兼容性:确保 HBuilderX 为最新版本(建议使用正式版),并检查项目配置中 Vue 3 模式已正确启用。在
manifest.json中确认已配置"vueVersion": "3"。 -
作用域问题:在
setup中声明的ref必须返回给模板,你的代码已正确返回root,但需确保没有其他同名变量覆盖。 -
使用
getCurrentInstance调试:可以尝试通过getCurrentInstance获取当前实例,检查组件上下文。import { getCurrentInstance, onMounted } from 'vue' onMounted(() => { const instance = getCurrentInstance() console.log(instance.refs) // 查看 refs 对象 })


