//! SSR (Server-Side Rendering) 模块 //! //! 提供 Leptos 0.8 的 SSR 渲染基础设施。 //! 使用 `RenderHtml::to_html_with_buf` 将 Leptos view 渲染为 HTML 字符串。 pub mod pages; pub mod styles; pub use styles::MNOTE_CSS; use leptos::prelude::*; use leptos::tachys::view::Position; /// 将任何实现 `RenderHtml` 的视图渲染为 HTML 字符串 (SSR) /// /// 使用 Leptos 0.8 的 `RenderHtml::to_html_with_buf` 方法, /// 通过 `Position::default()` (即 FirstChild) 初始化位置状态。 pub fn render_view(view: impl RenderHtml) -> String { let mut buf = String::new(); let mut position = Position::default(); RenderHtml::to_html_with_buf( view, &mut buf, &mut position, true, // escape — 对 HTML 特殊字符进行转义 false, // mark_branches — 不标记分支注释 vec![], // extra_attrs — 无需额外属性 ); buf } #[cfg(test)] mod tests { use super::*; use leptos::view; #[test] fn render_view_produces_non_empty_html() { let html = render_view(view! {

"Hello SSR"

}); assert!(!html.is_empty()); assert!(html.contains("Hello SSR")); assert!(html.contains("

")); } #[test] fn render_view_escapes_html_special_chars() { let html = render_view(view! {

""

}); assert!(html.contains("<")); assert!(!html.contains("