1
0

static_generation.rs 2.1 KB

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