Skip to main content

Module post_detail

Module post_detail 

Source
Expand description

文章详情页面模块。

对应路由 /post/:slug(SsrMode::Async:<Title>/<Meta> 与 404 状态码依赖文章数据)。

数据获取:LazyRoute::data 在主包里同步创建 Resource,调用 get_public_post_by_slug server function,根据 URL 中的 slug 获取单篇文章详情 (含正文 HTML、目录、封面及上下篇导航);视图代码在 --split 构建下拆进独立 WASM 分包,与数据并发加载。

§反应式取数的关键

Leptos 路由在参数变化时复用本路由视图(上/下一篇导航即同一路由间的 slug 变化), 因此资源必须以 use_params_map 派生的 Memo<String> 为 source:slug 变化即重新 请求,memo 的相等比较过滤无关的路由通知。

§按文章重建子树

PostContent、PostToc、CommentSection 的函数体只运行一次(增强脚本初始化、 scroll-spy 绑定、评论资源都在挂载时建立),必须随文章重建。整篇文章视图由 Suspend 在资源每次解析后重新产出,子组件天然随 slug 重建,无需额外 key。

Structs§

PostDetailProps 🔒
Props for the PostDetail component.
PostRoute
文章详情路由,对应 /post/:slug。

Functions§

PostDetail 🔒
文章详情主体:文章头部、封面、正文、页脚、评论区与目录。
__PostRoute_View 🔒
fetch_post 🔒
取数函数随分包加载,见 hooks::ssr_resource。
hydration_form 🔒
水合数据里的文章:正文与目录已在 SSR HTML 里(inner_html 水合不改写 DOM), 正文只留可运行块骨架,目录换成占位;其余字段照旧。长文的水合数据因此不再重复一遍正文。