simple_desktop.rs 2.2 KB

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