readme.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //! The example from the readme!
  2. //!
  3. //! This example demonstrates how to create a simple counter app with dioxus. The `Signal` type wraps inner values,
  4. //! making them `Copy`, allowing them to be freely used in closures and and async functions. `Signal` also provides
  5. //! helper methods like AddAssign, SubAssign, toggle, etc, to make it easy to update the value without running
  6. //! into lock issues.
  7. use dioxus::prelude::*;
  8. fn main() {
  9. launch(app);
  10. }
  11. fn app() -> Element {
  12. let mut vec = use_signal(|| vec![1, 2, 3]);
  13. let len = vec.len();
  14. println!("app len: {}", len);
  15. use_effect(move || {
  16. println!("app effect len: {}", vec.len());
  17. });
  18. rsx! {
  19. button {
  20. onclick: move |_| {
  21. let mut vec = vec.write();
  22. vec.push(len);
  23. },
  24. "Add"
  25. }
  26. button {
  27. onclick: move |_| {
  28. vec.pop();
  29. },
  30. "Remove"
  31. }
  32. for i in 0..len {
  33. Child {
  34. index: i,
  35. vec,
  36. }
  37. }
  38. }
  39. }
  40. #[component]
  41. fn Child(index: usize, vec: Signal<Vec<usize>>) -> Element {
  42. let item = use_memo(move || vec.read()[index]);
  43. rsx! {
  44. div { "Item: {item}" }
  45. }
  46. }