Day 12 Yew (一)

本贴最后更新于 469 天前,其中的信息可能已经渤澥桑田

image

首先创建一个二进制项目,然后我们使用: cargo install trunk

trunk 是一种脚手架帮助我们构建 wasm 项目

[package]
name = "project"
version = "0.1.0"
edition = "2021"


[dependencies]
wasm-bindgen = "0.2.67"
stylist = { version = "0.10.0", features = ["yew"]}
yew = "0.19.3"

然后我们在项目的根目录中创建一个 index.html​ 之后我们自动补全就不用管了,接着编写我们的 lib.rs


use  yew::prelude::*;

#[function_component(ComponentName)] 
// 定义一个组件 组件的名称ComponentName
// 他会帮助我们生成一个 ComponentName 的结构
fn component_name() -> Html{
    html! {
        <div>
            <div>{"HelloWorld"}</div>
        </div>
    }
}

fn main(){
    yew::start_app::<ComponentName>();
}

接着直接 trunk serve​ 即可

img

📚 Yew 尝鲜

创建时间:2023-04-10 02:27 星期一


lib.rs
use  yew::prelude::*;

#[function_component(ComponentName)]  // 宏
// 定义一个组件 组件的名称ComponentName
// 他会帮助我们生成一个 ComponentName 的结构
pub fn component_name() -> Html{
    html! {
        <div>
            <div>{"HelloWorld"}</div>
        </div>
    }
}

main.rs
use project::ComponentName;


fn main(){
    yew::start_app::<ComponentName>();
}

分子、原子、组织归纳法:

  • 小到 按钮 文字 我们放在原子文件夹中(atom)
  • 比较大的:按钮组 文本列表放在分子中 (molecules)
  • 大的 导航 footer header 放在组织中 (organisms)

Debug

我们想使用 console 的时候 可以加入一个 gloo​的 crate

gloo = "0.6.1"

use std::fmt::format;

use gloo::console::log;
use  yew::prelude::*;

#[function_component(ComponentName)] 
// 定义一个组件 组件的名称ComponentName
// 他会帮助我们生成一个 ComponentName 的结构
pub fn component_name() -> Html{
    let debugValue = vec![1,1,3,4];
    let stringValue = format!("{:?}", debugValue);
    log! (stringValue);

    html! {
        <div>
            <div>{"HelloWorld"}</div>
        </div>
    }
}

​​image​​

HTML! 的 IF 语句

use std::fmt::format;

use gloo::console::log;
use  yew::prelude::*;

#[function_component(ComponentName)] 
// 定义一个组件 组件的名称ComponentName
// 他会帮助我们生成一个 ComponentName 的结构
pub fn component_name() -> Html{
    let username = "No";

    html! {
       <div>
        if username == "UserName"{
            <div>{"HelloWorld"}</div>
        }else{
            <div>{"NoThing"}</div>
        }
       </div>
    }
}

Loop

当我们遍历元组的时候 我们需要给元组套上一些 类似 li​ 的东西

list_use.iter().map() 函数需要一个闭包参数 他会遍历 list_use​ 列表中的元素并传入给这个闭包进行处理,然后以闭包函数的返回值进行替代 他返回的是一个迭代器,我们可以使用 collect::<Type>​ 将他们转化为指定类型的 Vec 变量。

use yew::prelude::*;
#[function_component(ListLoop)]
pub fn list_loop() -> Html {
    let list_use = vec!["张三", "李四", "王五"];

    html! {
        <div>
            <ul>
                {
                     list_use.iter().map(
                        |element| html!{<li>{element}</li>}
                    ).collect::<Html>()
                }<br />
            </ul>
        </div>
    }
}

我们可以对其中的代码进行复用分离

use std::fmt::Display;

use yew::prelude::*;

pub fn mk_li<T>(lst: &Vec<T>) -> Html
where
    T: Display + Clone, 
{
    let lst_u = lst.clone();

    html! {
        <div>
            <ul>
                {
                    lst_u.iter().map(
                        | ele | html!{
                            <li> {ele} </li>
                        }
                    ).collect::<Html>()
                }
            </ul>
        </div>
    }
}

#[function_component(ListLoop)]
pub fn list_loop() -> Html {
    let list_use = vec!["张天师", "李四", "王五"];
    let dom_list = mk_li(&list_use);
    html!{
        <div>
            {dom_list}
        </div>
    }
}

  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖
4 操作
KuMa 在 2023-04-10 14:16:40 更新了该帖
KuMa 在 2023-04-10 03:17:22 更新了该帖
KuMa 在 2023-04-10 03:17:13 更新了该帖
KuMa 在 2023-04-10 02:22:59 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...