signals.rs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. use dioxus::prelude::*;
  2. use std::time::Duration;
  3. fn main() {
  4. dioxus_desktop::launch(app);
  5. }
  6. fn app(cx: Scope) -> Element {
  7. let mut count = dioxus_signals::use_signal(cx, || 0);
  8. let saved_values = dioxus_signals::use_signal(cx, || vec![0]);
  9. use_future!(cx, || async move {
  10. loop {
  11. count += 1;
  12. tokio::time::sleep(Duration::from_millis(400)).await;
  13. }
  14. });
  15. cx.render(rsx! {
  16. h1 { "High-Five counter: {count}" }
  17. button { onclick: move |_| count += 1, "Up high!" }
  18. button { onclick: move |_| count -= 1, "Down low!" }
  19. button {
  20. onclick: move |_| saved_values.push(count.value()),
  21. "Save this value"
  22. }
  23. // We can do boolean operations on the current signal value
  24. if count.value() > 5 {
  25. rsx!{ h2 { "High five!" } }
  26. }
  27. // We can cleanly map signals with iterators
  28. for value in saved_values.read().iter() {
  29. h3 { "Saved value: {value}" }
  30. }
  31. })
  32. }