第一章:Dioxus 框架入门与环境搭建

博客v1.0系列教程(Dioxus)博客 v1.0 系列教程 (Dioxus)

第一章:Dioxus 框架入门与环境搭建

1. 什么是 Dioxus

Dioxus 是一个用于构建跨平台用户界面的 Rust 框架。它受到 React 的启发,但充分利用了 Rust 的性能和安全性优势。

核心特性:

| 特性 | 说明 | |------|------| | 声明式 UI | 用 RSX 语法描述界面,框架负责更新 | | 响应式状态 | Signal 自动追踪依赖,精准重渲染 | | 跨平台 | 同一套代码可编译到 Web/桌面/移动端/服务端 | | 零成本抽象 | 无虚拟 DOM 运行时开销,编译时优化 |

支持的平台:

// 同一个组件,不同平台
#[component]
fn App() -> Element {
    rsx! { "Hello, Dioxus!" }
}

// Web  SPA:  dioxus::launch(App)  → 浏览器 WASM
// 桌面 应用: dioxus::launch(App)  → 原生窗口
// SSR 渲染: dioxus_ssr::render   → HTML 字符串
// LiveView: 服务端运行,客户端实时同步

2. 环境搭建

2.1 安装 Rust

# 安装 Rust(如果还没有)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 确保 Rust 是最新版本
rustup update stable

# 添加 WASM 编译目标(Web 应用需要)
rustup target add wasm32-unknown-unknown

2.2 安装 Dioxus CLI

cargo install dioxus-cli

2.3 创建新项目

# 方式一:使用 CLI 创建
dx new my-blog
cd my-blog

# 方式二:手动创建
cargo new my-blog --bin
cd my-blog

2.4 配置 Cargo.toml

[dependencies]
dioxus = { version = "0.7", features = ["web"] }

# 如果开发 SSR 应用,添加:
# dioxus = { version = "0.7", features = ["fullstack"] }
# dioxus-ssr = "0.7"

3. 第一个组件

3.1 Hello World

use dioxus::prelude::*;

fn main() {
    dioxus::launch(App);
}

#[component]
fn App() -> Element {
    let name = "Dioxus";

    rsx! {
        div { class: "container",
            h1 { "Hello, {name}!" }
            p { "欢迎来到 Dioxus 的世界" }
            button { "点击我" }
        }
    }
}

3.2 运行

# Web 模式(开发服务器 + 热重载)
dx serve

# 或直接编译为 WASM 用任意 HTTP 服务器托管
dx build --release

4. 项目结构

my-blog/
├── Cargo.toml           # 依赖配置
├── src/
│   └── main.rs          # 入口文件
├── public/
│   └── index.html       # HTML 模板
└── assets/              # 静态资源

5. RSX 初体验

RSX 是 Dioxus 的声明式 UI 语法,类似 HTML 但嵌入在 Rust 代码中:

rsx! {
    div { class: "card",
        h2 { "标题" }
        p { "段落文本" }
        ul {
            li { "项目 1" }
            li { "项目 2" }
            li { "项目 3" }
        }
        button {
            class: "btn-primary",
            onclick: move |_| println!("点击了"),
            "提交"
        }
    }
}

关键规则:

  • 元素名用小写(divpbutton
  • 属性用双引号(class: "..."
  • 动态值用花括号({variable}
  • 事件用闭包(onclick: move |e| ...

6. 小结

  • Dioxus 是一个 Rust 跨平台 UI 框架,支持 Web/桌面/移动/SSR
  • 使用 dioxus::launch(App) 启动应用
  • RSX 语法是声明式 UI 的核心
  • CLI 工具 dx 提供开发服务器和构建功能
  • 下一章将深入学习组件化开发
dioxusrustwasmsetup