---
name: "SmartDevicesManager.on"
mode: "api"
versionRequirements:
  - { name: "@ray-js/panel-sdk", version: "1.16.0" }
title: "on"
summary: "多设备管理 on 方法说明，介绍如何订阅 SmartDevicesManager 的 change 事件，监听设备添加、初始化、状态变化和删除等多设备管理事件。"
---

## SmartDevicesManager.on

> [VERSION] @ray-js/panel-sdk >= 1.16.0

> 💡 常见事件类型包括：add、init、initComplete、initProgress、delete、dpDataChange、deviceOnlineStatusUpdate / deviceInfoUpdated、networkStatusChange、bluetoothAdapterStateChange。

### 描述

订阅多设备管理器变更事件。 SdmProvider 内部已通过 change 事件驱动多设备 Hooks 刷新；常规业务通常无需手动监听。 仅在 Provider 外部监听设备状态变化（如全局日志、非 React 组件等场景）时使用。

### 参数

`Params`

| 参数 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| `event` | `"change"` | 是 | 事件名，固定为 change |
| `handler` | `(event: { type: string; [key: string]: any }) => void` | 是 | 事件回调函数 |

### 返回值

无


### 示例代码

#### 监听不同事件类型并读取返回结构

```ts
manager.on('change', event => {
  switch (event.type) {
    case 'add':
    case 'init':
      console.log(event.key, event.instance);
      break;
    case 'initProgress':
      console.log(event.progress.total, event.progress.initialized, event.progress.keys);
      break;
    case 'dpDataChange':
    case 'deviceOnlineStatusUpdate':
    case 'deviceInfoUpdated':
      console.log(event.key, event.instance, event.data);
      break;
    case 'networkStatusChange':
    case 'bluetoothAdapterStateChange':
      console.log(event.data);
      break;
    case 'initComplete':
      console.log('all initialized');
      break;
    case 'delete':
      console.log(event.key);
      break;
  }
});
```
