miri_full_app.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. use dioxus::prelude::*;
  2. use dioxus_core::ElementId;
  3. use dioxus_elements::SerializedHtmlEventConverter;
  4. use std::rc::Rc;
  5. #[test]
  6. fn miri_rollover() {
  7. set_event_converter(Box::new(SerializedHtmlEventConverter));
  8. let mut dom = VirtualDom::new(app);
  9. dom.rebuild(&mut dioxus_core::NoOpMutations);
  10. for _ in 0..3 {
  11. dom.handle_event(
  12. "click",
  13. Rc::new(PlatformEventData::new(Box::<SerializedMouseData>::default())),
  14. ElementId(2),
  15. true,
  16. );
  17. dom.process_events();
  18. _ = dom.render_immediate_to_vec();
  19. }
  20. }
  21. fn app() -> Element {
  22. let mut idx = use_signal(|| 0);
  23. let onhover = |_| println!("go!");
  24. rsx! {
  25. div {
  26. button {
  27. onclick: move |_| {
  28. idx += 1;
  29. println!("Clicked");
  30. },
  31. "+"
  32. }
  33. button { onclick: move |_| idx -= 1, "-" }
  34. ul {
  35. {(0..idx()).map(|i| rsx! {
  36. ChildExample { i: i, onhover: onhover }
  37. })}
  38. }
  39. }
  40. }
  41. }
  42. #[component]
  43. fn ChildExample(i: i32, onhover: EventHandler<MouseEvent>) -> Element {
  44. rsx! { li { onmouseover: move |e| onhover.call(e), "{i}" } }
  45. }