shared_state.rs 942 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. fn main() {
  4. dioxus_desktop::launch(App);
  5. }
  6. struct DarkMode(bool);
  7. #[rustfmt::skip]
  8. pub fn App(cx: Scope) -> Element {
  9. use_shared_state_provider(cx, || DarkMode(false));
  10. render!(
  11. DarkModeToggle {},
  12. AppBody {}
  13. )
  14. }
  15. pub fn DarkModeToggle(cx: Scope) -> Element {
  16. let dark_mode = use_shared_state::<DarkMode>(cx).unwrap();
  17. render!(input {
  18. r#type: "checkbox",
  19. oninput: move |event| {
  20. let is_enabled = event.value == "true";
  21. dark_mode.write().0 = is_enabled;
  22. },
  23. })
  24. }
  25. fn AppBody(cx: Scope) -> Element {
  26. let dark_mode = use_shared_state::<DarkMode>(cx).unwrap();
  27. let is_dark_mode = dark_mode.read().0;
  28. let answer = if is_dark_mode { "Yes" } else { "No" };
  29. render!(
  30. p {
  31. "Is Dark mode enabled? {answer}"
  32. }
  33. )
  34. }