---
name: "useProtocolRun"
mode: "api"
versionRequirements:
  - { name: "@ray-js/panel-sdk", version: "1.8.0" }
title: "useProtocolRun - 根据给定的 props 协议执行"
summary: "根据设备通信协议（WiFi、Zigbee、SigMesh）执行对应处理逻辑的 Hook。"
questions:
  - "useProtocolRun 如何根据设备通信协议执行不同的处理函数？"
  - "useProtocolRun 支持哪些协议类型的回调（wifi、zigbee、sigMesh）？"
  - "useProtocolRun 的 default 回调在什么情况下会被触发？"
  - "如何将 devId 传入 useProtocolRun 来指定目标设备？"
  - "useProtocolRun 返回的 run 函数调用后会执行什么逻辑？"
  - "如何在点击事件中调用 useProtocolRun 返回的执行函数？"
  - "useProtocolRun 是否支持同时处理多种协议类型的设备？"
  - "WiFi 设备和 Zigbee 设备通过 useProtocolRun 如何实现差异化逻辑？"
  - "useProtocolRun 的参数对象中各协议回调函数的类型签名是什么？"
  - "从 @ray-js/panel-sdk 导入 useProtocolRun 后如何在组件中使用？"
---

## useProtocolRun

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

> 💡 该 Hook 会根据设备信息自动判断通信协议类型（Zigbee、SIG Mesh、Wi-Fi 等），并执行对应的回调。
> 设备信息会被缓存，首次获取后不再重复请求。

### 描述

根据设备通信协议类型执行对应的回调函数

### 参数

`Params`

| 参数 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| `props` | `Props` | 是 | 配置对象，包含 devId 及各协议类型的回调函数 |
| `deps` | `any` | 否 | 可选的依赖项，变化时会重新生成执行函数 |

### 返回值

无


### 引用对象

##### `type` Props

| 属性 | 类型 | 描述 |
| --- | --- | --- |
| `devId` | `string` | 设备 ID |
| `zigbee` | `() => void` | Zigbee 设备时执行的回调 |
| `sigMesh` | `() => void` | SIG Mesh 设备时执行的回调 |
| `sigMeshGateway` | `() => void` | SIG Mesh 设备通过网关连接时执行的回调 |
| `wifi` | `() => void` | Wi-Fi 设备时执行的回调 |
| `ble` | `() => void` | 蓝牙设备时执行的回调 |
| `group` | `() => void` | 群组设备时执行的回调 |
| `default` | `() => void` | 未匹配到任何协议类型时执行的兜底回调 |
| `deps` | `any` | 可选的依赖项，变化时会重新生成执行函数 |


### 示例代码

#### 示例

```tsx
import { useProtocolRun } from '@ray-js/panel-sdk';

function ProtocolHandler() {
  const run = useProtocolRun({
    devId: 'device123',
    wifi: () => console.log('Wi-Fi 设备'),
    zigbee: () => console.log('Zigbee 设备'),
    sigMesh: () => console.log('SIG Mesh 设备'),
    default: () => console.log('其他协议'),
  });

  useEffect(() => {
    run();
  }, [run]);
}
```
