Yew框架入门教程:构建Rust WebAssembly前端应用

Yew框架入门教程:构建Rust WebAssembly前端应用

yew Rust / Wasm framework for creating reliable and efficient web applications yew 项目地址: https://gitcode.com/gh_mirrors/ye/yew

前言

Yew是一个基于Rust语言的现代化前端框架,它利用WebAssembly技术让开发者能够使用Rust构建高性能的Web应用程序。本教程将带领你从零开始,使用Yew框架构建一个简单的视频列表应用,涵盖从环境搭建到组件开发、状态管理等核心概念。

环境准备

必备工具

在开始之前,请确保你的开发环境满足以下要求:

  1. 安装最新版本的Rust工具链
  2. 安装Trunk构建工具
  3. 添加WASM编译目标
rustup update
cargo install trunk
rustup target add wasm32-unknown-unknown

项目初始化

创建一个新的Rust项目并进入项目目录:

cargo new yew-video-app
cd yew-video-app

第一个Yew应用

基础配置

修改Cargo.toml文件,添加Yew依赖:

[dependencies]
yew = { version = "0.20", features = ["csr"] }

创建主应用组件

src/main.rs中创建基础应用结构:

use yew::prelude::*;

#[function_component(App)]
fn app() -> Html {
    html! {
        <h1>{ "Hello Yew!" }</h1>
    }
}

fn main() {
    yew::Renderer::<App>::new().render();
}

启动开发服务器

创建基本的index.html文件后,使用Trunk启动开发服务器:

trunk serve --open

构建UI界面

HTML结构转换

Yew使用html!宏来构建UI,其语法类似于JSX但有一些区别:

  1. 表达式必须用{}包裹
  2. 必须有单个根节点
  3. 元素必须正确闭合
html! {
    <>
        <h1>{ "RustConf Explorer" }</h1>
        <div>
            <h3>{"视频列表"}</h3>
            <p>{ "演讲者: 演讲标题" }</p>
        </div>
    </>
}

使用Rust数据结构

定义视频数据结构并在组件中使用:

#[derive(Clone, PartialEq)]
struct Video {
    id: usize,
    title: String,
    speaker: String,
    url: String,
}

let videos = vec![
    Video {
        id: 1,
        title: "构建与破坏".to_string(),
        speaker: "张三".to_string(),
        url: "#".to_string(),
    },
    // 更多视频...
];

组件化开发

创建可重用组件

将视频列表提取为独立组件:

#[derive(Properties, PartialEq)]
struct VideosListProps {
    videos: Vec<Video>,
    on_click: Callback<Video>
}

#[function_component(VideosList)]
fn videos_list(props: &VideosListProps) -> Html {
    let on_click = props.on_click.clone();
    
    props.videos.iter().map(|video| {
        let on_video_select = {
            let on_click = on_click.clone();
            let video = video.clone();
            Callback::from(move |_| {
                on_click.emit(video.clone())
            })
        };

        html! {
            <p key={video.id} onclick={on_video_select}>
                {format!("{}: {}", video.speaker, video.title)}
            </p>
        }
    }).collect()
}

状态管理

使用Yew的钩子管理应用状态:

let selected_video = use_state(|| None);

let on_video_select = {
    let selected_video = selected_video.clone();
    Callback::from(move |video: Video| {
        selected_video.set(Some(video))
    })
};

数据获取

添加必要依赖

[dependencies]
gloo-net = "0.6"
serde = { version = "1.0", features = ["derive"] }
wasm-bindgen-futures = "0.4"

实现API请求

修改Video结构并实现数据获取:

#[derive(Clone, PartialEq, Deserialize)]
struct Video {
    id: usize,
    title: String,
    speaker: String,
    url: String,
}

let videos = use_state(|| vec![]);
{
    let videos = videos.clone();
    use_effect_with((), move |_| {
        let videos = videos.clone();
        wasm_bindgen_futures::spawn_local(async move {
            let fetched_videos: Vec<Video> = Request::get("/api/videos")
                .send()
                .await
                .unwrap()
                .json()
                .await
                .unwrap();
            videos.set(fetched_videos);
        });
        || ()
    });
}

总结

通过本教程,你已经学会了:

  1. 如何搭建Yew开发环境
  2. 创建基本的Yew组件
  3. 使用Rust数据结构构建UI
  4. 组件间的通信与状态管理
  5. 从API获取并显示数据

Yew框架结合了Rust的强大类型系统和现代前端开发模式,为构建高性能Web应用提供了新的可能性。随着对Yew更深入的学习,你将能够构建更加复杂和功能丰富的Web应用程序。

yew Rust / Wasm framework for creating reliable and efficient web applications yew 项目地址: https://gitcode.com/gh_mirrors/ye/yew

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫皎奕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值