static_generation.rs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use dioxus_router::prelude::*;
  4. use dioxus_router::ssr::{DefaultRenderer, IncrementalRendererConfig};
  5. fn main() {
  6. let mut renderer = IncrementalRendererConfig::new(DefaultRenderer {
  7. before_body: r#"<!DOCTYPE html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <meta name="viewport" content="width=device-width,
  12. initial-scale=1.0">
  13. <title>Dioxus Application</title>
  14. </head>
  15. <body>"#
  16. .to_string(),
  17. after_body: r#"</body>
  18. </html>"#
  19. .to_string(),
  20. })
  21. .static_dir("./static")
  22. .memory_cache_limit(5)
  23. .build();
  24. renderer.pre_cache_static::<Route>();
  25. for _ in 0..2 {
  26. for id in 0..10 {
  27. renderer.render(Route::Post { id });
  28. }
  29. }
  30. }
  31. #[inline_props]
  32. fn Blog(cx: Scope) -> Element {
  33. render! {
  34. div {
  35. "Blog"
  36. }
  37. }
  38. }
  39. #[inline_props]
  40. fn Post(cx: Scope, id: usize) -> Element {
  41. render! {
  42. div {
  43. "PostId: {id}"
  44. }
  45. }
  46. }
  47. #[inline_props]
  48. fn PostHome(cx: Scope) -> Element {
  49. render! {
  50. div {
  51. "Post"
  52. }
  53. }
  54. }
  55. #[inline_props]
  56. fn Home(cx: Scope) -> Element {
  57. render! {
  58. div {
  59. "Home"
  60. }
  61. }
  62. }
  63. #[rustfmt::skip]
  64. #[derive(Clone, Debug, PartialEq, Routable)]
  65. enum Route {
  66. #[nest("/blog")]
  67. #[route("/")]
  68. Blog {},
  69. #[route("/post/index")]
  70. PostHome {},
  71. #[route("/post/:id")]
  72. Post {
  73. id: usize,
  74. },
  75. #[end_nest]
  76. #[route("/")]
  77. Home {},
  78. }