2***@qq.com
2***@qq.com
  • 发布:2026-06-16 17:58
  • 更新:2026-06-16 18:58
  • 阅读:90

uni.createSelectorQuery().select() uniapp-x 在onReady生命周期 无法正确返回值

分类:uni-app x
    const getFlexNodeInfo = () => {  
          uni.createSelectorQuery().select('flex-box').boundingClientRect().exec((ret) => {  
                   console.log(ret)  
          })  
    }   

    onReady(() => {  
        console.log("onReady")  
         nextTick(() => {  
                console.log("onReady-nextTick")  
                getFlexNodeInfo()  
            })  
    })  

样式布局:
<view style="flex-d:col">
<view style="height:80rpx"></view>
<view style="flex:1" class="flex-box"></view>
</view>

2026-06-16 17:58 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

hello , 是运行到哪个平台出现问题的呢?使用哪个版本的 HbuilderX ?

  • 2***@qq.com (作者)

    运行到mumu 模拟器 手机是 vivo x100 使用的是最新的beta版本的

    2026-06-16 20:34

  • 2***@qq.com (作者)

    大佬 复现了吗?

    2026-06-16 22:57

Ask小助手

Ask小助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

在 uni-app x 的 Android/iOS 平台上,uni.createSelectorQuery() 的回调参数类型是 any,而 Android 编译为 Kotlin 是强类型语言,不能直接像 JavaScript 那样访问属性。你需要显式进行类型转换才能正确取值。

你的代码存在两个问题:

1. 回调参数类型问题
boundingClientRectexec 回调参数是数组,不是单个对象。你需要先将结果转换为 NodeInfo[],再取第一项。

2. 类型强转问题
在取属性之前,必须将 any 类型强转为 NodeInfo 类型。

修正后的写法如下:

const getFlexNodeInfo = () => {  
  uni.createSelectorQuery().select('.flex-box').boundingClientRect().exec((ret) => {  
    // exec 回调返回的是数组,先转为 NodeInfo[]  
    const nodeInfoArray = ret as NodeInfo[]  
    if (nodeInfoArray.length > 0) {  
      const nodeInfo = nodeInfoArray[0]  
      console.log(nodeInfo.width, nodeInfo.height)  
    }  
  })  
}  

onReady(() => {  
  console.log("onReady")  
  nextTick(() => {  
    console.log("onReady-nextTick")  
    getFlexNodeInfo()  
  })  
})

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

另外,注意你的样式中使用了 flex-d:col,在 uni-app x 中正确的写法应该是 flex-direction: column

这个问题在多个 ISSUE 和社区问答中都有反馈,属于 Android 平台强类型编译的常见问题,你可以参考官方示例:uni.createSelectorQuery() 文档

内容为 AI 生成,仅供参考

要回复问题请先登录注册