📌 项目地址DioxusLabs/dioxus | ⭐ 37,556 颗星 | 🔧 Rust | 📜 未标注

用同一份代码开发 Web、桌面和移动应用

如果你写过 React,再看 Dioxus 的代码会非常眼熟——但它用的是 Rust。这个项目的核心价值在于一套代码,三种平台:浏览器(Web)、原生桌面(macOS/Linux/Windows)和原生移动端(Android/iOS)。更关键的是,它从底层就设计了完整的全栈能力,不像 Tauri 那样需要额外写前端,也不像 Flutter 那样需要学 Dart。

README 里放了一个直观的计数器例子:

fn app() -> Element {
    let mut count = use_signal(|| 0);

    rsx! {
        h1 { "High-Five counter: {count}" }
        button { onclick: move |_| count += 1, "Up high!" }
        button { onclick: move |_| count -= 1, "Down low!" }
    }
}

use_signal 是状态管理的核心,类似 React 的 useState,但响应式更接近 Solid 的信号机制。rsx! 宏写 HTML-like 结构,直接在 Rust 里操作。

快速上手:零配置热重载

安装 Dioxus CLI 后,一条命令就能跑起应用。官方文档给了最常用的开发指令:

dx serve

启动后修改 HTML、CSS 会实时生效。更激进的是实验性的 --hotpatch 参数:

dx serve --hotpatch

这个功能可以实时热更新 Rust 代码逻辑(不仅仅是前端样式),对于 Rust 这种编译型语言来说相当少见。README 强调:整个热重载过程是“subsecond”(亚秒级)。

打包部署同样简洁:

dx bundle

Web 端会自动优化,生成 .avif 图片、.wasm 文件;桌面端打包成 .deb、.dmg 或 .msi;移动端直接跑在模拟器或真机上。从开发到发布,不需要额外配置 Webpack 或 Gradle。

全栈能力:Server Functions + Axum

Dioxus 内置了与 axum 的深度集成。你可以在前端代码里定义 Server Function,自动生成对应的后端 API 路由,全程类型安全。README 列出了开箱即用的功能:

  • WebSocket、SSE 服务端推送
  • 文件上传/下载
  • 服务端渲染(SSR)
  • 表单处理
  • 中间件

也可以直接接入已有的 axum 后端。这意味着你在一个项目中既写客户端逻辑,又写服务端逻辑,而状态管理、路由、类型全由 Rust 编译器保证一致性。

与 React / Flutter / Tauri 的差异

工具 语言 平台支持 核心差异
React JS/TS Web(移动端需 React Native) 拥有最庞大的生态,但性能受限于 JS 解释器
Flutter Dart 移动端、Web、桌面 自绘引擎,UI 一致性高,但 Dart 语言小众
Tauri + 前端 Rust + JS 桌面、移动端 后端 Rust,前端 JS,代码分层,不能一套同时跑
Dioxus Rust Web、桌面、移动端、服务器 原生 Rust 全栈,信号驱动,热重载 Rust 代码

Dioxus 的特殊之处在于:它不依赖 WebView(桌面端用 webview-like 渲染,但移动端有原生 WGPU 渲染器实验),而且可以“三行代码”切换目标平台——仅需修改 dx serve --platform 的参数。

README 里专门提到实验性的原生渲染器:基于 WGPU,可用于嵌入式 Linux、Bevy 游戏引擎等场景。这意味着 Dioxus 的适用范围还在扩展。

当前局限与注意事项

  • Rust 学习曲线:如果你不熟悉 Rust 的所有权、生命周期、异步,会有一段适应期。Dioxus 虽然 API 模仿 React,但底层强制 Rust 的规则。
  • 移动端仍算早期:官方文档承认 Android/iOS 支持是“first-class”,但实际使用需要配置 JNI/Native API 环境,并且实验性渲染器(WGPU)的稳定性不如 Web 端。
  • 生态规模:第三方组件库不像 React 那样丰富。Dioxus 提供了类似 shadcn/ui 的原始组件,但复杂 UI 可能需要自己封装。
  • 许可证:Dioxus 使用 MIT 或 Apache 2.0 双许可,可以自由使用。

如果你已经是 Rust 开发者,并且需要在多个平台快速原型或交付生产级应用,Dioxus 是目前最接近“写一次、到处运行”的 Rust 方案。如果是 JS 生态重度用户,建议先用小项目试水,因为 Rust 的编译器报错在你熟练之前可能会很磨人。

这篇文章对你有帮助吗?

发表回复