memo.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 memos_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. let memo = cx.use_hook(move || {
  22. to_owned![counter];
  23. memo(move || {
  24. counter.borrow_mut().effect += 1;
  25. println!("Signal: {:?}", signal);
  26. signal.value()
  27. })
  28. });
  29. assert_eq!(memo.value(), 0);
  30. signal += 1;
  31. assert_eq!(memo.value(), 1);
  32. render! {
  33. div {}
  34. }
  35. },
  36. counter.clone(),
  37. );
  38. let _ = dom.rebuild().santize();
  39. let current_counter = counter.borrow();
  40. assert_eq!(current_counter.component, 1);
  41. assert_eq!(current_counter.effect, 2);
  42. }