Yew 是一个用于构建高效、交互式前端 Web 应用程序的现代 Rust 框架,它借鉴了 React 和 Elm 等框架的设计理念,同时充分利用 Rust 的语言特性。
核心特性
- 基于组件的架构
Yew 采用组件化开发模式,类似于 React:
-
组件是可重用的 UI 构建块
-
支持属性(props)和状态(state)管理
-
生命周期方法控制组件行为
- WebAssembly 支持
Yew 编译为 WebAssembly (Wasm),带来接近原生的性能:
-
快速渲染和更新
-
小体积的二进制文件
-
与 JavaScript 无缝互操作
- 声明式 UI
使用 Rust 的宏系统实现类似 JSX 的语法:
html! {<div class="container"><p>{ "Hello, Yew!" }</p><button onclick={callback}>{ "Click me" }</button></div>
}
- 高效更新
-
虚拟 DOM 差异算法
-
最小化 DOM 操作
-
批量更新提高性能
主要概念
组件系统
-
Component trait: 定义组件行为和生命周期
-
Properties: 类型安全的组件参数
-
Callbacks: 处理用户交互的事件
通信机制
-
消息传递: 使用 ComponentLink 发送和处理消息
-
服务: 内置 HTTP、WebSocket 和定时器服务
-
上下文: 跨组件共享数据
状态管理
-
组件本地状态
-
全局状态管理选项(如 yewdux)
-
支持 Redux 模式
生态系统
配套工具和库
-
Trunk: 构建和打包工具
-
yew-router: 官方路由解决方案
-
yewdux: Redux 风格的状态管理
-
yewtil: 实用工具集合
开发体验
-
热重载支持
-
与 wasm-pack 集成
-
丰富的示例和文档
示例代码
简单计数器组件
use yew::prelude::*;enum Msg {Increment,Decrement,
}struct Counter {count: i64,
}impl Component for Counter {type Message = Msg;type Properties = ();fn create(_ctx: &Context<Self>) -> Self {Self { count: 0 }}fn update(&mut self, _ctx: &Context<Self>, msg: Self::Message) -> bool {match msg {Msg::Increment => self.count += 1,Msg::Decrement => self.count -= 1,}true}fn view(&self, ctx: &Context<Self>) -> Html {let link = ctx.link();html! {<div><button onclick={link.callback(|_| Msg::Decrement)}>{ "-" }</button><span>{ self.count }</span><button onclick={link.callback(|_| Msg::Increment)}>{ "+" }</button></div>}}
}
使用属性(Props)
#[derive(Properties, PartialEq)]
struct Props {title: String,on_click: Callback<()>,
}struct MyComponent;impl Component for MyComponent {type Message = ();type Properties = Props;fn view(&self, ctx: &Context<Self>) -> Html {let Props { title, on_click } = ctx.props();html! {<div><h1>{ title }</h1><button onclick={on_click.reform(|_| ())}>{ "Click me" }</button></div>}}
}
优势和适用场景
优势
-
性能: Wasm 提供接近原生的执行速度
-
安全性: Rust 的内存安全保证
-
类型安全: 编译时检查减少运行时错误
-
代码共享: 前后端使用相同语言
适用场景
-
高性能 Web 应用
-
复杂交互式界面
-
需要与现有 Rust 代码库集成的项目
-
对安全性和可靠性要求高的应用
学习资源
-
官方文档
-
GitHub 仓库
-
Yew 示例集合
-
社区论坛和聊天
Yew 正在快速发展,是 Rust 生态系统中构建前端应用的首选框架之一,特别适合已经熟悉 Rust 或追求高性能、安全性的开发团队。