Rust 的 React,一套代码跑遍 web/桌面/移动端
更新于 2026-07-23
← 返回汇总Rust 的 React,一套代码跑遍 web/桌面/移动端
Rust 全栈跨平台 UI 框架。React 风格组件模型 + RSX 宏,一套代码编译到 web(WASM)、桌面(Webview/WGPU)、移动端、SSR。Signals 状态管理融合 React/Solid/Svelte,Server Functions 深度集成 axum 实现全栈 Rust。亚秒级热重载(含实验性 Rust hot-patch),dx CLI 一键 serve/bundle/ship。38.1k Stars,全职核心团队,5 年沉淀。Web hello world <50kb,桌面/移动 app <5MB。
Rust · Apache-2.0 · 全职核心团队(FutureWei / Satellite.im / GitHub Accelerator 资助)· 桌面/移动 app 可小于 5MB · 实验性 WGPU 原生渲染器
JS/TS 生态成熟,但打包带整个 Chromium,动辄百 MB 内存。Rust 党想要轻量原生体验。
Tauri 用 web 前端 + Rust 后端,靠 IPC 通信。UI 仍是 JS,不是"全栈 Rust"。跨端逻辑要写两套。
Slint/egui/iced 各有 DSL,无 web 技术栈红利,生态小,学习成本高。
借走 React 最成熟的两个抽象——组件模型 + 声明式 UI——用 Rust 重写。RSX 宏让 Rust 代码写起来像 JSX,但全程类型安全、零成本抽象。
同一套组件树,根据目标平台切换渲染后端。web 走 WebAssembly + DOM,桌面走 Webview 或实验性 WGPU,移动端走 Webview + JNI/ObjC 桥接。
融合 React Hooks、Solid Signals、Svelte Store 三家之长。细粒度响应式,无虚拟 DOM diff 开销,自动追踪依赖。
fn app() -> Element { let mut count = use_signal(|| 0); // 细粒度 signal rsx! { h1 { "High-Five counter: {count}" } button { onclick: move |_| count += 1, "Up high!" } button { onclick: move |_| count -= 1, "Down low!" } } }
use_signal 类似 useState 但基于 Solid 式 signal——只有读取该 signal 的节点才重渲染,非整树 diff。
深度集成 axum。用 #[server] 宏标注的函数,客户端调用时自动序列化为 HTTP 请求,服务端执行——前后端同一套 Rust 代码,类型端到端安全。
dioxus::serve 返回 Axum router,保留热重载与 devtools一条 dx serve 启动,改 markup/CSS 毫秒级生效。实验性 --hotpatch 连 Rust 代码都能实时热补丁——改逻辑不重启。
这是 Dioxus 对标前端框架(Vite 体验)的关键投入——Rust 编译慢的痛点被热重载大幅缓解。
| 平台 | 渲染方式 | 特点 |
|---|---|---|
| Web | WebAssembly → DOM | SSR 预渲染 + 客户端 rehydrate。hello world 约 50kb,可比 React |
| 桌面 | Webview / 实验 WGPU / Freya(Skia) | macOS/Linux/Windows。原生系统访问无需 IPC,cargo run 即跑 |
| 移动 | Webview / 实验 WGPU/Skia | 生成 .ipa/.apk。直调 Java/ObjC,秒级上设备 |
| SSR | 服务端渲染 | Suspense、水合、静态生成、增量再生 |
| 实验 | WGPU 原生 / Liveview | 可嵌入 Bevy/WGPU,甚至跑在嵌入式 Linux |
| 维度 | Tauri | Leptos | Slint | Dioxus |
|---|---|---|---|---|
| 定位 | 桌面壳(web+Rust) | Web 框架 | 原生 UI DSL | 全栈跨平台 |
| UI 语言 | JS/TS(任意前端框架) | RSX(Rust) | 自有 DSL | RSX(Rust) |
| 全栈 Rust | 否(IPC) | 是(Web) | 是 | 是(全平台) |
| 跨端 | 桌面为主 | Web 为主 | 桌面/嵌入式 | Web/桌面/移动/SSR |
| 状态管理 | 取决于前端 | Signals(优秀) | 自有响应式 | Signals(融合三家) |
选型建议:纯 Web 选 Leptos;桌面壳 + 现成 JS 前端选 Tauri;嵌入式/原生 DSL 选 Slint;一套代码全平台 + 全栈 Rust 选 Dioxus。
serve 开发、bundle 打包、ship 部署全流程# 1. 装 CLI curl -fsSL https://dioxuslabs.com/install.sh | bash # 或 cargo install --git ... dioxus-cli # 2. 新建项目(零配置) dx new my-app cd my-app # 3. 启动开发(热重载) dx serve # 移动端: dx serve --platform android # 4. 打包发布 dx bundle # 自动优化,Web/桌面/移动
从 hello world 到设备运行以秒计。Rust 类型安全贯穿前后端,编译期消灭整类 bug。
Rust 全栈 UI 赛道最完整的答案。38.1k stars + 全职团队 + 5 年沉淀——它把"一套 Rust 代码跑全平台"从口号做成了可用产品。v0.7 的热重载 + axum 全栈 + signals 统一是质变里程碑,DX 已逼近前端框架。若移动端与 WGPU 原生渲染走向稳定,且 1.0 承诺 API 冻结,有机会成为 Rust 生态的"React"——定义跨平台 UI 的标准范式。挑战在于:React/Tauri 生态护城河深,Dioxus 需在"全栈 Rust + 真跨端"这条差异化路线上持续证明自己。长期看,Rust 在系统级应用的渗透是不可逆趋势,Dioxus 站对了赛道。