单设备支持群组部分支持

useDevice(selector?: (device: DeviceData) => any;, equalityFn?: (prevDeviceData: DeviceData, nextDeviceData: DeviceData) => boolean;)

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

描述

获取智能设备信息、功能点模型、网络状态、蓝牙状态,数据变动时驱动组件重新渲染。 不传 selector 时返回完整 DeviceData,任何字段变化都触发重渲染,推荐始终传入 selector 仅选取所需功能点以优化渲染性能。

参数

参数类型必填说明
selector(device: DeviceData) => any;否选择器函数,入参为包含 devInfo、dpSchema、network、bluetooth 的设备数据对象,返回值类型由 selector 选择器决定,可能为任意值
equalityFn(prevDeviceData: DeviceData, nextDeviceData: DeviceData) => boolean;否自定义比较函数,返回 true 则不触发重渲染

返回值

类型:DeviceData
返回值类型由 selector 选择器决定,可能为任意值

引用对象

typeDeviceData
属性类型必填描述
是设备信息(含 codeIds / idCodes 进行功能点 Code ↔ ID 互查)
是功能点模型集合(key 为 dpCode)
是当前手机的网络连接状态(所有设备共享,非设备在线状态;设备是否在线见 devInfo.isOnline)
bluetooth{ available: boolean; }是蓝牙适配器状态
typeCapability
export type Capability = number;
typeDevAttribute
export type DevAttribute = number;

合法值

DevInfo.schema.mode
值说明最低版本
rw--
ro--
wr--
DevInfo.schema.property.type
值说明最低版本
string--
bool--
value--
enum--
bitmap--
raw--
DevInfo.schema.type
值说明最低版本
raw--
obj--
FunConfig.tyabirysr4_app
值说明最低版本
follow--
--app-B1--
FunConfig.tyabis5d9w_app
值说明最低版本
follow--
--app-M1--
DpSchema.mode
值说明最低版本
rw--
ro--
wr--
DpSchema.property.type
值说明最低版本
string--
bool--
value--
enum--
bitmap--
raw--
DpSchema.type
值说明最低版本
raw--
obj--

示例代码

获取完整设备数据

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

function Home() {
  const { devInfo, network } = useDevice();
  return <Text>{devInfo.name} - 网络: {network.isConnected ? '已连接' : '断开'}</Text>;
}

订阅网络状态

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

function Home() {
  const isConnected = useDevice(device => device.network.isConnected);
  return <Text>网络: {isConnected ? '已连接' : '断开'}</Text>;
}

自定义 rerender

// 仅网络连接变化时更新
const network = useDevice(
  device => device.network,
  (prev, next) => prev.isConnected === next.isConnected,
);

获取功能点模型集合

const dpSchema = useDevice(device => device.dpSchema);
// dpSchema: { switch_led: { code, property, type, mode, ... }, ... }

通过 codeIds / idCodes 进行功能点 Code ↔ ID 互查

const devInfo = useDevice(device => device.devInfo);
const dpId = devInfo.codeIds['switch_led'];   // code → id
const dpCode = devInfo.idCodes[1];             // id → code

群组环境兼容

// 群组下 devInfo 实际为 GroupInfo,部分字段需适配
import { useDevice } from '@ray-js/panel-sdk';
import { Text, getLaunchOptionsSync } from '@ray-js/ray';

function Home() {
  const isGroup = !!getLaunchOptionsSync()?.query?.groupId;
  const devInfo = useDevice(d => d.devInfo);

  const id = isGroup ? devInfo.groupId : devInfo.devId;
  const name = devInfo.name || (isGroup ? devInfo.groupName : '设备');
  const isOnline = isGroup
    ? devInfo.deviceList?.some(d => d.isOnline)
    : devInfo.isCloudOnline;

  return <Text>{name}({id}) - {isOnline ? '在线' : '离线'}</Text>;
}