前端生态长期被 JavaScript/TypeScript 主导,但当应用变复杂、对性能与内存安全有要求时,JS 的运行时与类型局限就开始显现。另一批开发者想要“用一门系统语言写前端”,却苦于生态破碎、构建链路复杂。
WebAssembly 打开了用 Rust 写前端的大门,但光有 WASM 不够——你还需要组件模型、状态管理、事件系统这些框架能力。Yew 就是 Rust 世界里最接近“写 SPA”体验的框架:用 Rust 写组件,编译成 WASM 跑在浏览器。

项目基本信息

信息项详情
项目名称yew
GitHub地址https://github.com/yewstack/yew
项目描述用 Rust 与 WebAssembly 编写可靠高效 Web 应用的框架
作者yewstack
开源协议Apache License 2.0
开源状态公开
LanguagesRust
支持平台Windows / macOS / Linux
最后更新2026-10-30

一、项目介绍

yewstack/yew 是一个用 Rust 编写、面向 WebAssembly 的客户端 Web 应用框架,Apache-2.0 协议。它采用类似 Elm 的组件模型,支持 JSX 风格语法(通过宏)、并发与多线程 worker、以及 web worker 等现代能力。Yew 让开发者用 Rust 的类型与内存安全优势构建响应式 UI,再把产物编译成 WASM 部署到任意静态托管。它适合既想要系统语言可靠性、又想写现代 Web 应用的团队。

二、核心优势

  1. Rust 可靠性:用 Rust 的类型与所有权约束编写 UI,编译期抓大量错误。
  2. WASM 性能:产物为 WebAssembly,运行效率显著高于纯 JS 逻辑重的部分。
  3. 组件化:提供类 Elm 的组件模型与 JSX 风格宏,结构清晰、状态可控。
  4. 并发支持:支持 web worker 与多线程,适合把重计算移出主线程。
  5. 纯前端可部署:编译成静态 WASM,可托管到任意 CDN/静态服务。

三、适用场景

  • 对性能或内存安全敏感的前端模块(编辑器、可视化、计算密集)。
  • 已有 Rust 后端、希望前后端同语言的团队。
  • 想用 WASM 替代部分 JS 重逻辑的工程化项目。
  • 实验性/教学性地把系统语言引入前端。

四、安装教程

在 Cargo 项目里添加依赖:

cargo add yew --features csr   # 客户端渲染(csr)
# 或开发阶段用 trunk 作为构建工具
cargo install trunk

常见报错:首次构建会拉取较多 Rust/WASM 目标,需联网并安装 wasm 目标(如 rustup target add wasm32-unknown-unknown);trunk 未安装会无法本地预览。

五、使用示例

一个最简计数器组件示意:

use yew::prelude::*;

#[function_component]
fn App() -> Html {
    let counter = use_state(|| 0);
    let onclick = {
        let counter = counter.clone();
        Callback::from(move |_| counter.set(*counter + 1))
    };
    html! {
        <button onclick={onclick}>{ &*counter }</button>
    }
}

真实效果:编译成 WASM 后在浏览器渲染出一个按钮,点击使其上的数字 +1——用 Rust 的状态钩子实现了和前端框架一样的响应式交互。

六、常见问题

Q:Yew 和 JS 框架比性能更好吗?
A:重逻辑/计算密集处 WASM 通常更快;但 DOM 操作仍需桥接,整体体验取决于是否用对了场景。
Q:一定要写 Rust 吗?
A:Yew 本身就是 Rust 框架,组件与逻辑都用 Rust(html! 宏),没有 JS 版本。
Q:如何部署?
A:编译为静态 WASM + HTML,托管到任意静态服务即可,无需专用服务器。

七、总结

Yew 把 Rust 的可靠性与 WebAssembly 的性能带进前端,让“用系统语言写 Web 应用”成为现实。对追求类型安全、内存安全与性能的团队,它是 Rust 生态里最成熟的 Web 框架之一;Apache-2.0 协议,适合作为 WASM 前端的评估起点。