/** * 获取关联设备的结构化功能点操作方法集合,需配合 dp-kit 拦截器使用 * @public * @since @ray-js/panel-sdk 1.16.0 * @returns 结构化操作方法集合,key 为设备标识,value 为该设备的结构化 actions。 * 使用方式与单设备 useStructuredActions 一致 * @typeOverride returns DevicesActions * @remarks * 使用前需同时满足: * 1. 挂载 SdmDevicesProvider 并配置关联设备映射 * 2. 各设备初始化时已配置 dp-kit 拦截器(createDpKit) * 注意事项: * 该 Hooks 返回的 actions 方法是对底层 `publishDps` 的封装,调用 actions 并不会导致组件立即重渲染。 * 只有当指令下发成功且设备上报新的 DP 状态时,使用了对应 `useStructuredDevicesProps` 且 `selector` 命中的组件才会被触发重渲染。 * @example 完整链路:配置 dp-kit + 读取 + 下发(以照明 colour_data 为例) * ```tsx * // ---- 1. devices/protocols/index.ts:实例化 parser 并映射到 DP code ---- * import { protocols as sdkProtocols } from '@ray-js/panel-sdk'; * import { lampSchemaMap } from '../schema'; * * export const protocols = { * [lampSchemaMap.colour_data.code]: new sdkProtocols.ColourTransformer(), * // ColourTransformer.parser() 返回 { hue, saturation, value } → useStructuredDevicesProps 读 * // ColourTransformer.formatter() 接收 { hue, saturation, value } → useStructuredDevicesActions 写 * }; * * // ---- 2. devices/index.ts:创建 dpKit 并注入 SmartDevicesManager ---- * import { createDpKit, SmartDevicesManager } from '@ray-js/panel-sdk'; * import { protocols } from '@/devices/protocols'; * * export const dpKit = createDpKit({ protocols }); * export const deviceManager = new SmartDevicesManager(); * * // batchAdd 时注入 dp-kit 拦截器 * deviceManager.batchAdd([ * { key: 'lamp1', deviceId: 'xxx_device_id_1', interceptors: dpKit.interceptors }, * { key: 'lamp2', deviceId: 'xxx_device_id_2', interceptors: dpKit.interceptors }, * ]); * * // ---- 3. 页面组件:通过 useStructuredDevicesActions 下发结构化数据 ---- * import { View, Text } from '@ray-js/ray'; * import { useStructuredDevicesProps, useStructuredDevicesActions } from '@ray-js/panel-sdk'; * * export default function ColourControl() { * // 推荐:精确选用需要的状态,避免无关变化引起无意义渲染 * const colourData = useStructuredDevicesProps(props => props.lamp1?.colour_data); * const actions = useStructuredDevicesActions(); * * const setHue = (hue: number) => { * actions.lamp1?.colour_data.set({ ...colourData, hue }); * }; * * return ( * setHue(120)}> * 当前 hue: {colourData?.hue} * 点击设置 hue 为 120 * * ); * } * ``` */ export declare function useStructuredDevicesActions>(): T;