router.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. use dioxus::prelude::*;
  2. use dioxus_router::prelude::*;
  3. fn main() {
  4. launch_desktop(Route::Home {});
  5. }
  6. #[derive(Routable, Clone)]
  7. #[rustfmt::skip]
  8. enum Route {
  9. #[layout(NavBar)]
  10. #[route("/")]
  11. Home {},
  12. #[nest("/blog")]
  13. #[layout(Blog)]
  14. #[route("/")]
  15. BlogList {},
  16. #[route("/blog/:name")]
  17. BlogPost { name: String },
  18. #[end_layout]
  19. #[end_nest]
  20. #[end_layout]
  21. #[nest("/myblog")]
  22. #[redirect("/", || Route::BlogList {})]
  23. #[redirect("/:name", |name: String| Route::BlogPost { name })]
  24. #[end_nest]
  25. #[route("/:..route")]
  26. PageNotFound {
  27. route: Vec<String>,
  28. },
  29. }
  30. #[component]
  31. fn NavBar() -> Element {
  32. rsx! {
  33. nav {
  34. ul {
  35. li {
  36. Link { to: Route::Home {}, "Home" }
  37. }
  38. li {
  39. Link { to: Route::BlogList {}, "Blog" }
  40. }
  41. }
  42. }
  43. Outlet::<Route> {}
  44. }
  45. }
  46. #[component]
  47. fn Home() -> Element {
  48. rsx! { h1 { "Welcome to the Dioxus Blog!" } }
  49. }
  50. #[component]
  51. fn Blog() -> Element {
  52. rsx! {
  53. h1 { "Blog" }
  54. Outlet::<Route> {}
  55. }
  56. }
  57. #[component]
  58. fn BlogList() -> Element {
  59. rsx! {
  60. h2 { "Choose a post" }
  61. ul {
  62. li {
  63. Link {
  64. to: Route::BlogPost {
  65. name: "Blog post 1".into(),
  66. },
  67. "Read the first blog post"
  68. }
  69. }
  70. li {
  71. Link {
  72. to: Route::BlogPost {
  73. name: "Blog post 2".into(),
  74. },
  75. "Read the second blog post"
  76. }
  77. }
  78. }
  79. }
  80. }
  81. #[component]
  82. fn BlogPost(name: String) -> Element {
  83. rsx! { h2 { "Blog Post: {name}" } }
  84. }
  85. #[component]
  86. fn PageNotFound(route: Vec<String>) -> Element {
  87. rsx! {
  88. h1 { "Page not found" }
  89. p { "We are terribly sorry, but the page you requested doesn't exist." }
  90. pre { color: "red", "log:\nattemped to navigate to: {route:?}" }
  91. }
  92. }