option.rs 914 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. use dioxus::prelude::*;
  2. use dioxus_signals::*;
  3. fn main() {
  4. dioxus_desktop::launch(App);
  5. }
  6. #[component]
  7. fn App(cx: Scope) -> Element {
  8. let signal = use_signal(cx, || Some(String::from("Hello")));
  9. render! {
  10. button {
  11. onclick: move |_| {
  12. let new_value = (!signal.read().is_some()).then(|| String::from("Hello"));
  13. signal.set(new_value);
  14. },
  15. "Swap"
  16. }
  17. button {
  18. onclick: move |_| {
  19. if let Some(value) = &mut *signal.write() {
  20. value.push_str(" World");
  21. }
  22. },
  23. "Change"
  24. }
  25. if let Some(item) = signal.as_mapped_ref() {
  26. render! {
  27. Child { signal: item }
  28. }
  29. }
  30. }
  31. }
  32. #[component]
  33. fn Child(cx: Scope, signal: MappedSignal<String>) -> Element {
  34. render! {"{signal:?}"}
  35. }