map_signal.rs 955 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use dioxus_signals::Signal;
  4. fn main() {
  5. launch(app);
  6. }
  7. fn app() -> Element {
  8. let mut vec = use_signal(|| vec![0]);
  9. rsx! {
  10. button {
  11. onclick: move |_| {
  12. let mut write = vec.write();
  13. let len = write.len() as i32;
  14. write.push(len);
  15. },
  16. "Create"
  17. }
  18. button {
  19. onclick: move |_| {
  20. vec.write().pop();
  21. },
  22. "Destroy"
  23. }
  24. for i in 0..vec.len() {
  25. Child { count: vec.map(move |v| &v[i]) }
  26. }
  27. }
  28. }
  29. #[component]
  30. fn Child(count: MappedSignal<i32, Signal<Vec<i32>>>) -> Element {
  31. use_memo({
  32. to_owned![count];
  33. move || {
  34. let value = count.read();
  35. print!("Child value: {value}");
  36. }
  37. });
  38. rsx! {
  39. div {
  40. "Child: {count}"
  41. }
  42. }
  43. }