router.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use dioxus::router::{Link, Route, Router};
  4. use serde::Deserialize;
  5. fn main() {
  6. dioxus::desktop::launch(app);
  7. }
  8. fn app(cx: Scope) -> Element {
  9. cx.render(rsx! {
  10. Router {
  11. ul {
  12. Link { to: "/", li { "Go home!" } }
  13. Link { to: "users", li { "List all users" } }
  14. Link { to: "blog", li { "Blog posts" } }
  15. }
  16. Route { to: "/", "Home" }
  17. Route { to: "users",
  18. Route { to: "/", "User list" }
  19. Route { to: ":name", BlogPost {} }
  20. }
  21. Route { to: "blog"
  22. Route { to: "/", "Blog list" }
  23. Route { to: ":post", BlogPost {} }
  24. }
  25. Route { to: "", "Err 404 Route Not Found" }
  26. }
  27. })
  28. }
  29. fn BlogPost(cx: Scope) -> Element {
  30. let post = dioxus::router::use_route(&cx).last_segment();
  31. cx.render(rsx! {
  32. div {
  33. h1 { "Reading blog post: {post}" }
  34. p { "example blog post" }
  35. }
  36. })
  37. }
  38. #[derive(Deserialize)]
  39. struct Query {
  40. bold: bool,
  41. }
  42. fn User(cx: Scope) -> Element {
  43. let post = dioxus::router::use_route(&cx).last_segment();
  44. let query = dioxus::router::use_route(&cx).query::<Query>();
  45. cx.render(rsx! {
  46. div {
  47. h1 { "Reading blog post: {post}" }
  48. p { "example blog post" }
  49. }
  50. })
  51. }