useDevicesProps(selector: (devicesProps: { [key: string]: DpState }) => DpValue;, equalityFn?: (prev: DpValue, next: DpValue) => boolean;)

版本要求:
@ray-js/panel-sdk≥1.16.0

描述

获取关联设备的功能点状态集合数据。

参数

参数类型必填说明
selector(devicesProps: { [key: string]: DpState }) => DpValue;是选择器函数,入参为所有关联设备的 props 集合对象。 key 为设备标识,value 为该设备的功能点键值对
equalityFn(prev: DpValue, next: DpValue) => boolean;否自定义比较函数,返回 true 则不触发重渲染,默认 shallow equal

返回值

类型:DpValue
匹配选择器的功能点值,类型由 selector 返回值自动推导

引用对象

typeDpState功能点状态对象,key 为功能点 code,value 为功能点值
export type DpState = Record<string, DpValue>;
typeDpValue功能点值类型,可能为 boolean、number、string
export type DpValue = boolean | number | string;

示例代码

仅订阅单台设备的特定状态

import { useDevicesProps } from '@ray-js/panel-sdk';

export default function Lamp1Switch() {
  // 仅在 lamp1 的 switch_led 变化时重渲染
  const switchLed = useDevicesProps(p => p?.lamp1?.switch_led);

  return <Text>lamp1 开关:{switchLed ? 'ON' : 'OFF'}</Text>;
}

自定义 rerender

// useDevicesProps 内部已针对 selector 返回值做 shallow equal 浅比较,无特殊场景时无需传入 equalityFn。
import { useDevicesProps } from '@ray-js/panel-sdk';

export default function PowerMap() {
  const powerMap = useDevicesProps(
    p => {
      const map: Record<string, boolean> = {};
      Object.keys(p ?? {}).forEach(k => { map[k] = !!p[k]?.switch_led; });
      return map;
    },
    (prev, next) => JSON.stringify(prev) === JSON.stringify(next)
  );

  return (
    <View>
      {Object.keys(powerMap).map(k => (
        <Text key={k}>{k}: {powerMap[k] ? 'ON' : 'OFF'}</Text>
      ))}
    </View>
  );
}