1
0

static_generation.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. use std::time::Duration;
  2. use dioxus::prelude::*;
  3. use dioxus_router::prelude::*;
  4. use dioxus_ssr::incremental::{DefaultRenderer, IncrementalRendererConfig};
  5. #[tokio::main]
  6. async fn main() {
  7. let mut renderer = IncrementalRendererConfig::new()
  8. .static_dir("./static")
  9. .invalidate_after(Duration::from_secs(10))
  10. .build();
  11. println!(
  12. "SITE MAP:\n{}",
  13. Route::SITE_MAP
  14. .iter()
  15. .flat_map(|route| route.flatten().into_iter())
  16. .map(|route| {
  17. route
  18. .iter()
  19. .map(|segment| segment.to_string())
  20. .collect::<Vec<_>>()
  21. .join("")
  22. })
  23. .collect::<Vec<_>>()
  24. .join("\n")
  25. );
  26. // This function is available if you enable the ssr feature
  27. // on the dioxus_router crate.
  28. pre_cache_static_routes::<Route, _>(
  29. &mut renderer,
  30. &DefaultRenderer {
  31. before_body: r#"<!DOCTYPE html>
  32. <html lang="en">
  33. <head>
  34. <meta charset="UTF-8">
  35. <meta name="viewport" content="width=device-width,
  36. initial-scale=1.0">
  37. <title>Dioxus Application</title>
  38. </head>
  39. <body>"#
  40. .to_string(),
  41. after_body: r#"</body>
  42. </html>"#
  43. .to_string(),
  44. },
  45. )
  46. .await
  47. .unwrap();
  48. }
  49. #[component]
  50. fn Blog(cx: Scope) -> Element {
  51. render! {
  52. div {
  53. "Blog"
  54. }
  55. }
  56. }
  57. #[component]
  58. fn Post(cx: Scope, id: usize) -> Element {
  59. render! {
  60. div {
  61. "PostId: {id}"
  62. }
  63. }
  64. }
  65. #[component]
  66. fn PostHome(cx: Scope) -> Element {
  67. render! {
  68. div {
  69. "Post"
  70. }
  71. }
  72. }
  73. #[component]
  74. fn Home(cx: Scope) -> Element {
  75. render! {
  76. div {
  77. "Home"
  78. }
  79. }
  80. }
  81. #[rustfmt::skip]
  82. #[derive(Clone, Debug, PartialEq, Routable)]
  83. enum Route {
  84. #[nest("/blog")]
  85. #[route("/")]
  86. Blog {},
  87. #[route("/post/index")]
  88. PostHome {},
  89. #[route("/post/:id")]
  90. Post {
  91. id: usize,
  92. },
  93. #[end_nest]
  94. #[route("/")]
  95. Home {},
  96. }