1
0

router.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. Link { to: "/users/bill", li { "List all users" } }
  16. Link { to: "/blog/5", li { "Blog post 5" } }
  17. }
  18. Route { to: "/", "Home" }
  19. Route { to: "/users", "User list" }
  20. Route { to: "/users/:name", User {} }
  21. Route { to: "/blog", "Blog list" }
  22. Route { to: "/blog/:post", BlogPost {} }
  23. Route { to: "", "Err 404 Route Not Found" }
  24. }
  25. })
  26. }
  27. fn BlogPost(cx: Scope) -> Element {
  28. let post = dioxus::router::use_route(&cx).last_segment()?;
  29. cx.render(rsx! {
  30. div {
  31. h1 { "Reading blog post: {post}" }
  32. p { "example blog post" }
  33. }
  34. })
  35. }
  36. #[derive(Deserialize)]
  37. struct Query {
  38. bold: bool,
  39. }
  40. fn User(cx: Scope) -> Element {
  41. let post = dioxus::router::use_route(&cx).last_segment()?;
  42. let query = dioxus::router::use_route(&cx)
  43. .query::<Query>()
  44. .unwrap_or(Query { bold: false });
  45. cx.render(rsx! {
  46. div {
  47. h1 { "Reading blog post: {post}" }
  48. p { "example blog post" }
  49. if query.bold {
  50. rsx!{ b { "bold" } }
  51. } else {
  52. rsx!{ i { "italic" } }
  53. }
  54. }
  55. })
  56. }