Skip to content

getSingleNodeInfo

getSingleNodeInfocreateSelectorQuery 的节点查询结果统一成单个节点。

功能描述

各端 boundingClientRect 回调的返回值形态不一致:有的给单个对象,有的给数组,查询失败时还可能给空值。 每个调用点都写一遍 Array.isArray(...) ? ...[0] : ... 既啰嗦又容易漏,这里统一归一化。

函数签名

typescript
function getSingleNodeInfo(
  data: UniNamespace.NodeInfo | UniNamespace.NodeInfo[] | null | undefined,
): UniNamespace.NodeInfo | null | undefined;

参数

参数类型必填说明
dataUniNamespace.NodeInfo | UniNamespace.NodeInfo[] | null | undefined节点查询结果

返回值

第一个节点信息;传入空值时原样返回空值。

使用方法

typescript
import { getSingleNodeInfo } from "uni-toolkit/tools";

function getHeaderHeight(): Promise<number> {
  return new Promise((resolve) => {
    uni.createSelectorQuery()
      .select("#header")
      .boundingClientRect((data) => {
        const node = getSingleNodeInfo(data);
        resolve(node?.height ?? 0);
      })
      .exec();
  });
}

在组件内查询需要带上组件实例:

typescript
import { getSingleNodeInfo, useInstance } from "uni-toolkit";

const instance = useInstance();

uni.createSelectorQuery()
  .in(instance)
  .select(".card")
  .boundingClientRect((data) => {
    const node = getSingleNodeInfo(data);
    console.log(node?.top);
  })
  .exec();

注意事项

返回值可能为空,务必用可选链取属性。查询失败的常见原因是节点未渲染完成—— 在 onReady 之后或 nextTick 里再查。

基于 MIT 许可发布