suspense.rs 933 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #![allow(non_upper_case_globals)]
  2. //! Example: README.md showcase
  3. //!
  4. //! The example from the README.md.
  5. use dioxus::prelude::*;
  6. use dioxus_core as dioxus;
  7. use dioxus_core_macro::*;
  8. use dioxus_html as dioxus_elements;
  9. use dioxus_web;
  10. fn main() {
  11. dioxus_web::launch(App, |c| c);
  12. }
  13. static App: Component<()> = |cx, _| {
  14. let doggo = cx.suspend(|| async move {
  15. #[derive(serde::Deserialize)]
  16. struct Doggo {
  17. message: String,
  18. }
  19. let src = reqwest::get("https://dog.ceo/api/breeds/image/random")
  20. .await
  21. .expect("Failed to fetch doggo")
  22. .json::<Doggo>()
  23. .await
  24. .expect("Failed to parse doggo")
  25. .message;
  26. rsx!(cx, img { src: "{src}" })
  27. });
  28. rsx!(cx, div {
  29. h1 {"One doggo coming right up"}
  30. button { onclick: move |_| cx.needs_update(), "Get a new doggo" }
  31. {doggo}
  32. })
  33. };