SuperAPI AI 工具集

tauri-syntax-events

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

用途:在 Tauri 2.x 应用中实现 Rust 与 JavaScript 之间、以及不同窗口/Webview 之间的事件驱动通信,并避免事件监听器内存泄漏。

主要能力:Rust 侧提供 Emitter 与 Listener 两个特性,由 App、AppHandle、Webview、WebviewWindow、Window 实现。Emitter 方法包括 emit(全局广播)、emit_str(预序列化 JSON 字符串广播)、emit_to(定向到指定窗口/Webview 标签)、emit_filter(按谓词过滤目标)。Listener 方法包括 listen(每次触发)、once(触发一次后自动移除)、listen_any、once_any 与 unlisten(id)。前端 TypeScript 通过 @tauri-apps/api/event 提供 listen、once、emit、emitTo,listen/once 返回 Promise<UnlistenFn>。内置 TauriEvent 包括 tauri://resize、move、close-requested、destroyed、focus、blur、scale-change、theme-changed、window-created、webview-created 及拖拽相关事件。

使用方式:Rust 中调用 emit 前需 use tauri::Emitter;,调用 listen 前需 use tauri::Listener;。事件负载结构体需派生 Clone 与 serde::Serialize。前端需 await listen() 并在组件卸载时调用返回的 unlisten 函数,React 中应在 useEffect 的清理函数内处理。定向发送可用 emit_to 或前端 emitTo。权限方面,事件需要 capability 文件中的 core:event:default。

限制与注意:事件名仅允许字母数字、-、/、:、_,其他字符会导致运行时 panic;遗漏 Clone 会引发不易定位的编译错误;前端忘记 unlisten 会造成内存泄漏;listen() 返回 Promise 而非直接的 UnlistenFn。

适用场景:进度上报、用户操作通知、窗口间同步、初始化完成通知等。官方参考见 https://v2.tauri.app/develop/calling-rust/#event-system 及 docs.rs 上的 Emitter、Listener 文档。