Skip to main content
Widget Light 提供了一套类型化的事件系统,让你可以对用户交互、路由执行进度、钱包变化等做出响应。事件通过 postMessage 从 widget iframe 转发到你的主机应用。

订阅事件

使用 useWidgetLightEvents() 钩子获取事件发射器,然后用 on 订阅、用 off 取消订阅:

关键细节

  • 模块级单例 — 事件总线是一个模块级单例,因此 useWidgetLightEvents() 可以从任何组件调用。它不需要与 <LiFiWidgetLight> 放在一起,也不需要任何 provider 包裹。
  • 按订阅跟踪的转发 — 只有当至少有一个主机端监听器订阅时,事件才会从 iframe 转发。当你调用 events.on(eventName, handler) 时,主机会向 iframe 发送一条 WIDGET_EVENT_SUBSCRIBE 消息。当某个事件的最后一个监听器被移除时,主机会发送 WIDGET_EVENT_UNSUBSCRIBE。这避免了不必要的 postMessage 流量。
  • 稳定引用useWidgetLightEvents() 返回的发射器是一个稳定的模块级对象。你无需对其进行 memoize,也无需将其添加到依赖数组中(尽管这样做是安全的)。

跟踪路由执行

一个常见的用例是跟踪交换或桥接路由的生命周期:

事件参考

路由执行事件

表单和选择事件

钱包事件

UI 事件

设置和偏好事件

Payload 类型

所有 payload 类型都从 @lifi/widget-light 导出:
携带路由的 payload(WidgetLightRouteExecutionUpdateWidgetLightRouteSelected)对 route 字段使用 unknown,因为来自 @lifi/sdk 的完整路由类型在 Widget Light 的零依赖类型系统中不可用。如果你需要对路由属性进行类型化访问,请将其转换为你本地的 @lifi/sdk 类型。

WidgetLightEvent 枚举

所有事件名称都可以通过 WidgetLightEvent 枚举获取: