suspense.rs 866 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use dioxus::prelude::*;
  2. #[test]
  3. fn suspense_resolves() {
  4. // wait just a moment, not enough time for the boundary to resolve
  5. tokio::runtime::Builder::new_current_thread()
  6. .build()
  7. .unwrap()
  8. .block_on(async {
  9. let mut dom = VirtualDom::new(app);
  10. dom.rebuild(&mut dioxus_core::NoOpMutations);
  11. dom.wait_for_suspense().await;
  12. let out = dioxus_ssr::render(&dom);
  13. assert_eq!(out, "<div>Waiting for... child</div>");
  14. dbg!(out);
  15. });
  16. }
  17. fn app() -> Element {
  18. rsx!(
  19. div {
  20. "Waiting for... "
  21. suspended_child {}
  22. }
  23. )
  24. }
  25. fn suspended_child() -> Element {
  26. let mut val = use_signal(|| 0);
  27. if val() < 3 {
  28. spawn(async move {
  29. val += 1;
  30. });
  31. suspend()?;
  32. }
  33. rsx!("child")
  34. }