effect.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. #[test]
  8. 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. let current_counter = counter.borrow();
  37. assert_eq!(current_counter.component, 1);
  38. assert_eq!(current_counter.effect, 2);
  39. }