首先创建一个二进制项目,然后我们使用: 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
即可
📚 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>
}
}
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>
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于