lifecycle.rs 921 B

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