2022-02-17 23:38:51 +08:00
|
|
|
#![allow(non_snake_case)]
|
|
|
|
|
|
|
|
use dioxus::prelude::*;
|
2022-07-10 03:15:20 +08:00
|
|
|
use fermi::*;
|
2022-02-17 23:38:51 +08:00
|
|
|
|
|
|
|
fn main() {
|
2022-07-10 03:15:20 +08:00
|
|
|
dioxus_desktop::launch(app)
|
2022-02-17 23:38:51 +08:00
|
|
|
}
|
|
|
|
|
2023-06-21 20:09:11 +08:00
|
|
|
static NAME: Atom<String> = Atom(|_| "world".to_string());
|
2022-02-17 23:38:51 +08:00
|
|
|
|
|
|
|
fn app(cx: Scope) -> Element {
|
2023-01-12 08:13:41 +08:00
|
|
|
use_init_atom_root(cx);
|
2023-06-21 20:09:11 +08:00
|
|
|
let name = use_read(cx, &NAME);
|
2022-02-17 23:38:51 +08:00
|
|
|
|
|
|
|
cx.render(rsx! {
|
|
|
|
div { "hello {name}!" }
|
|
|
|
Child {}
|
2022-11-16 15:22:41 +08:00
|
|
|
ChildWithRef {}
|
2022-02-17 23:38:51 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
fn Child(cx: Scope) -> Element {
|
2023-06-21 20:09:11 +08:00
|
|
|
let set_name = use_set(cx, &NAME);
|
2022-02-17 23:38:51 +08:00
|
|
|
|
|
|
|
cx.render(rsx! {
|
|
|
|
button {
|
|
|
|
onclick: move |_| set_name("dioxus".to_string()),
|
|
|
|
"reset name"
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2022-04-25 08:47:22 +08:00
|
|
|
|
2023-06-21 20:09:11 +08:00
|
|
|
static NAMES: AtomRef<Vec<String>> = AtomRef(|_| vec!["world".to_string()]);
|
2022-04-25 08:47:22 +08:00
|
|
|
|
|
|
|
fn ChildWithRef(cx: Scope) -> Element {
|
2023-06-21 20:09:11 +08:00
|
|
|
let names = use_atom_ref(cx, &NAMES);
|
2022-04-25 08:47:22 +08:00
|
|
|
|
|
|
|
cx.render(rsx! {
|
|
|
|
div {
|
|
|
|
ul {
|
|
|
|
names.read().iter().map(|f| rsx!{
|
|
|
|
li { "hello: {f}" }
|
|
|
|
})
|
|
|
|
}
|
|
|
|
button {
|
|
|
|
onclick: move |_| {
|
|
|
|
let names = names.clone();
|
|
|
|
cx.spawn(async move {
|
|
|
|
names.write().push("asd".to_string());
|
|
|
|
})
|
2022-04-25 08:51:52 +08:00
|
|
|
},
|
|
|
|
"Add name"
|
2022-04-25 08:47:22 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|