mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-14 00:17:17 +00:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use dioxus::prelude::*;
|
|
|
|
fn main() {
|
|
launch_desktop(app);
|
|
}
|
|
|
|
fn app() -> Element {
|
|
let mut state = use_signal(|| 0);
|
|
let mut depth = use_signal(|| 1_usize);
|
|
|
|
if depth() == 5 {
|
|
return rsx! {
|
|
div { "Max depth reached" }
|
|
button { onclick: move |_| depth -= 1, "Remove depth" }
|
|
};
|
|
}
|
|
|
|
let items = use_memo(move || (0..depth()).map(|f| f as _).collect::<Vec<isize>>());
|
|
|
|
rsx! {
|
|
button { onclick: move |_| state += 1, "Increment" }
|
|
button { onclick: move |_| depth += 1, "Add depth" }
|
|
button {
|
|
onclick: move |_| async move {
|
|
depth += 1;
|
|
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
|
|
dbg!(items.read());
|
|
// if depth() is 5, this will be the old since the memo hasn't been re-computed
|
|
// use_memos are only re-computed when the signals they capture change
|
|
// *and* they are used in the current render
|
|
// If the use_memo isn't used, it can't be re-computed!
|
|
},
|
|
"Add depth with sleep"
|
|
}
|
|
}
|
|
}
|