memo.rs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // TODO: fix #1935
  2. // #![allow(unused, non_upper_case_globals, non_snake_case)]
  3. // use dioxus_core::NoOpMutations;
  4. // use std::collections::HashMap;
  5. // use std::rc::Rc;
  6. // use dioxus::html::p;
  7. // use dioxus::prelude::*;
  8. // use dioxus_core::ElementId;
  9. // use dioxus_signals::*;
  10. // use std::cell::RefCell;
  11. // #[test]
  12. // fn memos_rerun() {
  13. // let _ = simple_logger::SimpleLogger::new().init();
  14. // #[derive(Default)]
  15. // struct RunCounter {
  16. // component: usize,
  17. // effect: usize,
  18. // }
  19. // let counter = Rc::new(RefCell::new(RunCounter::default()));
  20. // let mut dom = VirtualDom::new_with_props(
  21. // |counter: Rc<RefCell<RunCounter>>| {
  22. // counter.borrow_mut().component += 1;
  23. // let mut signal = use_signal(|| 0);
  24. // let memo = use_memo({
  25. // to_owned![counter];
  26. // move || {
  27. // counter.borrow_mut().effect += 1;
  28. // println!("Signal: {:?}", signal);
  29. // signal()
  30. // }
  31. // });
  32. // assert_eq!(memo(), 0);
  33. // signal += 1;
  34. // assert_eq!(memo(), 1);
  35. // rsx! {
  36. // div {}
  37. // }
  38. // },
  39. // counter.clone(),
  40. // );
  41. // dom.rebuild_in_place();
  42. // let current_counter = counter.borrow();
  43. // assert_eq!(current_counter.component, 1);
  44. // assert_eq!(current_counter.effect, 2);
  45. // }
  46. // #[test]
  47. // fn memos_prevents_component_rerun() {
  48. // let _ = simple_logger::SimpleLogger::new().init();
  49. // #[derive(Default)]
  50. // struct RunCounter {
  51. // component: usize,
  52. // memo: usize,
  53. // }
  54. // let counter = Rc::new(RefCell::new(RunCounter::default()));
  55. // let mut dom = VirtualDom::new_with_props(
  56. // |props: Rc<RefCell<RunCounter>>| {
  57. // let mut signal = use_signal(|| 0);
  58. // if generation() == 1 {
  59. // *signal.write() = 0;
  60. // }
  61. // if generation() == 2 {
  62. // println!("Writing to signal");
  63. // *signal.write() = 1;
  64. // }
  65. // rsx! {
  66. // Child {
  67. // signal: signal,
  68. // counter: props.clone(),
  69. // }
  70. // }
  71. // },
  72. // counter.clone(),
  73. // );
  74. // #[derive(Default, Props, Clone)]
  75. // struct ChildProps {
  76. // signal: Signal<usize>,
  77. // counter: Rc<RefCell<RunCounter>>,
  78. // }
  79. // impl PartialEq for ChildProps {
  80. // fn eq(&self, other: &Self) -> bool {
  81. // self.signal == other.signal
  82. // }
  83. // }
  84. // fn Child(props: ChildProps) -> Element {
  85. // let counter = &props.counter;
  86. // let signal = props.signal;
  87. // counter.borrow_mut().component += 1;
  88. // let memo = use_memo({
  89. // to_owned![counter];
  90. // move || {
  91. // counter.borrow_mut().memo += 1;
  92. // println!("Signal: {:?}", signal);
  93. // signal()
  94. // }
  95. // });
  96. // match generation() {
  97. // 0 => {
  98. // assert_eq!(memo(), 0);
  99. // }
  100. // 1 => {
  101. // assert_eq!(memo(), 1);
  102. // }
  103. // _ => panic!("Unexpected generation"),
  104. // }
  105. // rsx! {
  106. // div {}
  107. // }
  108. // }
  109. // dom.rebuild_in_place();
  110. // dom.mark_dirty(ScopeId::ROOT);
  111. // dom.render_immediate(&mut NoOpMutations);
  112. // {
  113. // let current_counter = counter.borrow();
  114. // assert_eq!(current_counter.component, 1);
  115. // assert_eq!(current_counter.memo, 2);
  116. // }
  117. // dom.mark_dirty(ScopeId::ROOT);
  118. // dom.render_immediate(&mut NoOpMutations);
  119. // dom.render_immediate(&mut NoOpMutations);
  120. // {
  121. // let current_counter = counter.borrow();
  122. // assert_eq!(current_counter.component, 2);
  123. // assert_eq!(current_counter.memo, 3);
  124. // }
  125. // }