Skip to main content

Module preview

Module preview 

Source
Expand description

草稿/文章预览页面模块(管理员只读)。

对应路由 /admin/preview/:slug。

与公开详情页 crate::pages::post_detail 的关键差异:

  • 取数走 admin-only crate::api::posts::get_post_preview,不做 status = 'published' 过滤, 故草稿可预览;草稿绝不进公开缓存(cache::get/set_post_by_slug)。
  • 顶部浮起预览条(状态、桌面 / 手机宽度切换、返回编辑、草稿可直接发布), 手机档把正文放进 390px 画框。
  • 文末说明评论区在预览中隐藏。
  • 错误/未命中就地渲染,不向错误边界上抛。
  • 不渲染评论区(草稿无评论)。

§为何预览放在 /admin/* 下

SSR HTML 缓存按 URL 落盘/入内存,不区分用户身份。若管理员在 /post/<draft-slug> 看到草稿,渲染出的草稿 HTML 会被缓存,匿名访客再请求同一 URL 即命中缓存、直接拿到 草稿正文——草稿属保密内容,泄漏不可接受。/admin/preview/<slug> 受 admin_guard 中间件保护:匿名在 SSR 渲染前就被 302 跳走,不产生可泄漏的缓存。

§取数

后台数据是私有的,SSR 不取数:直接访问首屏为骨架屏,水合后由 Effect 拉取(数据加载 规则 2)。以路由参数 slug 为键,带请求世代号;slug 变化时先清空旧文章再取新文章, 发布后原地刷新(不清空)。

Structs§

PostPreviewProps
Props for the PostPreview component.
PreviewRoute
预览路由:纯客户端数据,无 SSR 预取。

Enums§

Branch 🔒
页面主体的互斥状态;用 Memo 去重,同一篇文章内的状态刷新不会重建整个预览。

Functions§

PostPreview
草稿/文章预览页面组件(管理员只读),对应路由 /admin/preview/:slug。
__PreviewRoute_View 🔒
post_body 🔒
文章正文区:头部、封面、目录、正文、页脚与评论区说明。随文章数据变化(发布后)重建。