flat_router.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. use dioxus::prelude::*;
  2. use dioxus::router::prelude::*;
  3. fn main() {
  4. launch(|| {
  5. rsx! {
  6. Router::<Route> {}
  7. }
  8. })
  9. }
  10. #[derive(Routable, Clone)]
  11. #[rustfmt::skip]
  12. enum Route {
  13. #[layout(Footer)]
  14. #[route("/")]
  15. Home {},
  16. #[route("/games")]
  17. Games {},
  18. #[route("/play")]
  19. Play {},
  20. #[route("/settings")]
  21. Settings {},
  22. }
  23. #[component]
  24. fn Footer() -> Element {
  25. rsx! {
  26. Outlet::<Route> {}
  27. p { "----" }
  28. nav {
  29. style { {STYLE} }
  30. Link { to: Route::Home {}, class: "nav-btn", "Home" }
  31. Link { to: Route::Games {}, class: "nav-btn", "Games" }
  32. Link { to: Route::Play {}, class: "nav-btn", "Play" }
  33. Link { to: Route::Settings {}, class: "nav-btn", "Settings" }
  34. }
  35. }
  36. }
  37. #[component]
  38. fn Home() -> Element {
  39. rsx!("Home")
  40. }
  41. #[component]
  42. fn Games() -> Element {
  43. rsx!("Games")
  44. }
  45. #[component]
  46. fn Play() -> Element {
  47. rsx!("Play")
  48. }
  49. #[component]
  50. fn Settings() -> Element {
  51. rsx!("Settings")
  52. }
  53. const STYLE: &str = r#"
  54. nav {
  55. display: flex;
  56. justify-content: space-around;
  57. }
  58. .nav-btn {
  59. text-decoration: none;
  60. color: black;
  61. }
  62. "#;