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(
WidgetLightRouteExecutionUpdate、WidgetLightRouteSelected)对 route 字段使用 unknown,因为来自 @lifi/sdk 的完整路由类型在 Widget Light 的零依赖类型系统中不可用。如果你需要对路由属性进行类型化访问,请将其转换为你本地的 @lifi/sdk 类型。WidgetLightEvent 枚举
所有事件名称都可以通过WidgetLightEvent 枚举获取:

