我正在研究将 Capacitor 应用程序迁移到 Tauri 的概念验证。我希望能够在
#[tauri::command]
函数中访问可变应用程序状态,但我发现在不诉诸全局可变变量的情况下很难做到这一点。
Tauri 关于状态管理的文档 建议将状态传递给
#[tauri::command]
函数,如下所示:
#[tauri::command]
fn increase_counter(state: State<'_, Mutex<AppState>>) -> u32 {
let mut state = state.lock().unwrap();
state.counter += 1;
state.counter
}
我正在阅读 v2.0 RC 文档,但这似乎与 v1 中的相同或相似。
这种方法的问题是,我需要在 JavaScript UI 的调用中提供状态,对吗?我希望状态完全在我的 Rust 代码中维护,而不是担心自己跨越 JavaScript 屏障来回传递它。
在 Tauri 中是否有一种我所缺少的惯用方法可以做到这一点,或者我是否需要使用
lazy_static
或其他一些解决方法?
这种方法的问题是,我需要在 JavaScript UI 的调用中提供状态,对吗?
不正确,
State
命令参数访问提供给 .manage()
的值。这些参数不是由 JavaScript 参数提供,也不会跨越 Rust-JavaScript 障碍。这在 1.0 和 2.0 中都是相同的行为。
您所拥有的是惯用的,并且已经做了您想要的事情(假设您通过
Mutex<AppState>
向您的 App
提供了初始 manage
)。该文档包含完整使用示例。