static_generation.rs 2.0 KB

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