simple_desktop.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use dioxus_router::prelude::*;
  4. fn main() {
  5. launch_desktop(|| {
  6. rsx! {
  7. Router::<Route> {}
  8. }
  9. });
  10. }
  11. #[derive(Routable, Clone)]
  12. #[rustfmt::skip]
  13. enum Route {
  14. #[layout(NavBar)]
  15. #[route("/")]
  16. Home {},
  17. #[nest("/new")]
  18. #[route("/")]
  19. BlogList {},
  20. #[route("/:post")]
  21. BlogPost {
  22. post: String,
  23. },
  24. #[end_nest]
  25. #[route("/oranges")]
  26. Oranges {},
  27. }
  28. #[component]
  29. fn NavBar() -> Element {
  30. rsx! {
  31. h1 { "Your app here" }
  32. ul {
  33. li {
  34. Link { to: Route::Home {}, "home" }
  35. }
  36. li {
  37. Link { to: Route::BlogList {}, "blog" }
  38. }
  39. li {
  40. Link {
  41. to: Route::BlogPost {
  42. post: "tim".into(),
  43. },
  44. "tims' blog"
  45. }
  46. }
  47. li {
  48. Link {
  49. to: Route::BlogPost {
  50. post: "bill".into(),
  51. },
  52. "bills' blog"
  53. }
  54. }
  55. li {
  56. Link {
  57. to: Route::BlogPost {
  58. post: "james".into(),
  59. },
  60. "james amazing' blog"
  61. }
  62. }
  63. }
  64. Outlet::<Route> {}
  65. }
  66. }
  67. #[component]
  68. fn Home() -> Element {
  69. println!("rendering home {:?}", current_scope_id());
  70. rsx! { h1 { "Home" } }
  71. }
  72. #[component]
  73. fn BlogList() -> Element {
  74. println!("rendering blog list {:?}", current_scope_id());
  75. rsx! { div { "Blog List" } }
  76. }
  77. #[component]
  78. fn BlogPost(post: String) -> Element {
  79. println!("rendering blog post {}", post);
  80. rsx! {
  81. div {
  82. h3 { "blog post: {post}" }
  83. Link { to: Route::BlogList {}, "back to blog list" }
  84. }
  85. }
  86. }
  87. #[component]
  88. fn Oranges() -> Element {
  89. rsx!("Oranges are not apples!")
  90. }