1
0

lifecycle.rs 951 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //! Tests for the lifecycle of components.
  2. use std::{cell::RefCell, rc::Rc};
  3. use anyhow::{Context, Result};
  4. use dioxus::prelude::*;
  5. use dioxus_core as dioxus;
  6. use dioxus_core_macro::*;
  7. use dioxus_html as dioxus_elements;
  8. mod test_logging;
  9. const IS_LOGGING_ENABLED: bool = true;
  10. type Shared<T> = Rc<RefCell<T>>;
  11. #[test]
  12. fn manual_diffing() {
  13. test_logging::set_up_logging(IS_LOGGING_ENABLED);
  14. #[derive(PartialEq, Props)]
  15. struct AppProps {
  16. value: Shared<&'static str>,
  17. }
  18. static App: FC<AppProps> = |cx, props| {
  19. let val = props.value.borrow();
  20. cx.render(rsx! { div { "{val}" } })
  21. };
  22. let value = Rc::new(RefCell::new("Hello"));
  23. let mut dom = VirtualDom::new_with_props(
  24. App,
  25. AppProps {
  26. value: value.clone(),
  27. },
  28. );
  29. let _ = dom.rebuild();
  30. *value.borrow_mut() = "goodbye";
  31. let edits = dom.diff();
  32. log::debug!("edits: {:?}", edits);
  33. }