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. .build();
  23. renderer.pre_cache_static::<Route>();
  24. for _ in 0..2 {
  25. for id in 0..10 {
  26. renderer.render(Route::Post { id });
  27. }
  28. }
  29. }
  30. #[inline_props]
  31. fn Blog(cx: Scope) -> Element {
  32. render! {
  33. div {
  34. "Blog"
  35. }
  36. }
  37. }
  38. #[inline_props]
  39. fn Post(cx: Scope, id: usize) -> Element {
  40. render! {
  41. div {
  42. "PostId: {id}"
  43. }
  44. }
  45. }
  46. #[inline_props]
  47. fn PostHome(cx: Scope) -> Element {
  48. render! {
  49. div {
  50. "Post"
  51. }
  52. }
  53. }
  54. #[inline_props]
  55. fn Home(cx: Scope) -> Element {
  56. render! {
  57. div {
  58. "Home"
  59. }
  60. }
  61. }
  62. #[rustfmt::skip]
  63. #[derive(Clone, Debug, PartialEq, Routable)]
  64. enum Route {
  65. #[nest("/blog")]
  66. #[route("/")]
  67. Blog {},
  68. #[route("/post/index")]
  69. PostHome {},
  70. #[route("/post/:id")]
  71. Post {
  72. id: usize,
  73. },
  74. #[end_nest]
  75. #[route("/")]
  76. Home {},
  77. }