2024-01-27 07:05:40 +00:00
|
|
|
use dioxus::prelude::*;
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
launch_desktop(app);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn app() -> Element {
|
|
|
|
let mut state = use_signal(|| 0);
|
|
|
|
let mut depth = use_signal(|| 1 as usize);
|
|
|
|
|
|
|
|
if depth() == 5 {
|
|
|
|
return rsx! {
|
|
|
|
div { "Max depth reached" }
|
|
|
|
button { onclick: move |_| depth -= 1, "Remove depth" }
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2024-01-31 01:59:57 +00:00
|
|
|
let items = use_memo(move || (0..depth()).map(|f| f as _).collect::<Vec<isize>>());
|
2024-01-27 07:05:40 +00:00
|
|
|
|
|
|
|
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"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|