前言

在上一篇文章中,我们讲了如何从 JS 中调用 Rust 函数,今天来聊一下如何在 Rust 中给 JS 传递数据。

JS 注册监听

之前说到 JS 是可以通过 invoke 来调用 Rust 方法的。

但很不幸, Rust 并不能直接调用 JS 函数。

要想从 Rust 传递数据给 JS ,可以通过事件来触发。

所以我们先要在 JS 中监听事件的触发,如下所示

1
2
3
4
import { appWindow } from "@tauri-apps/api/window";
appWindow.listen<string>("name", (event) => {
    console.log(event.payload);
});

在这个函数中,我们监听了名为 name 的事件,它有两个参数,第一个是事件名,第二个是事件,里面的 payload 字段就是从 Rust 发来的数据。

发送数据

Rust 中给 JS 发数据,需要借助 windowemit 方法

1
2
3
4
#[tauri::command]
fn set_name(window: tauri::Window) {
    window.emit("name", "tauri");
}

emit 的第一个参数是事件名,第二个就是要传递的数据。

总结

Tauri 想要从 Rust 传递数据到 JS 中,首先需要在 JS 中 注册监听函数,等待事件触发,然后在 Rust 中发送数据

参考

Events | Tauri Apps