effect.rs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #![allow(unused, non_upper_case_globals, non_snake_case)]
  2. use std::collections::HashMap;
  3. use std::rc::Rc;
  4. use dioxus::prelude::*;
  5. use dioxus_core::ElementId;
  6. use dioxus_signals::*;
  7. #[tokio::test]
  8. async fn effects_rerun() {
  9. simple_logger::SimpleLogger::new().init().unwrap();
  10. #[derive(Default)]
  11. struct RunCounter {
  12. component: usize,
  13. effect: usize,
  14. }
  15. let counter = Rc::new(RefCell::new(RunCounter::default()));
  16. let mut dom = VirtualDom::new_with_props(
  17. |cx| {
  18. let counter = cx.props;
  19. counter.borrow_mut().component += 1;
  20. let mut signal = use_signal(cx, || 0);
  21. cx.use_hook(move || {
  22. to_owned![counter];
  23. Effect::new(move || {
  24. counter.borrow_mut().effect += 1;
  25. println!("Signal: {:?}", signal);
  26. })
  27. });
  28. signal += 1;
  29. render! {
  30. div {}
  31. }
  32. },
  33. counter.clone(),
  34. );
  35. let _ = dom.rebuild().santize();
  36. dom.render_with_deadline(tokio::time::sleep(std::time::Duration::from_millis(100)))
  37. .await;
  38. let current_counter = counter.borrow();
  39. assert_eq!(current_counter.component, 1);
  40. assert_eq!(current_counter.effect, 2);
  41. }