Expand description
草稿/文章预览页面模块(管理员只读)。 草稿/文章预览页面模块(管理员只读)。
对应路由 /admin/preview/:slug。
与公开详情页 crate::pages::post_detail::PostDetail 的关键差异:
- 取数走 admin-only
crate::api::posts::get_post_preview,不做status = 'published'过滤, 故草稿可预览;草稿绝不进公开缓存(cache::get/set_post_by_slug)。 - 顶部渲染预览横幅(状态徽章 + 继续编辑 / 返回列表),便于从预览直达编辑。
- 错误/未命中就地渲染(admin nest 内无 ErrorBoundary),不向错误边界上抛。
- 不渲染评论区(草稿无评论)。
§为何预览放在 /admin/* 下
Dioxus IncrementalRenderer 的 SSR 磁盘缓存按 URL(path_and_query())落盘,
不区分用户身份。若管理员在 /post/<draft-slug> 看到草稿,渲染出的草稿 HTML
会被缓存到 static/post/<draft-slug>/,匿名访客再请求同一 URL 即命中缓存、
直接拿到草稿正文——草稿属保密内容,泄漏不可接受。/admin/preview/<slug> 受
admin_guard 中间件保护:匿名在 SSR 渲染前就被 302 跳走,不产生可泄漏的缓存。
§取数不挂起(与 post_detail.rs 的关键差异,勿“改回去“)
本页不用 use_server_future(...)?(挂起式取数),而是 use_signal +
spawn 的非挂起模式(与仪表盘等所有 admin 页一致)。原因:dioxus 0.7.10
存在 vdom 状态腐蚀 bug——当挂起中的 SuspenseBoundary 连同其后台子树一起
卸载(本页从 /admin/preview/* 客户端导航回前台时正是此路径:
AdminLayout 的 SuspenseBoundary 在 PostPreview future 尚未 resolve 时被整体
替换),dioxus-core 会对同一元素双重回收(console 报 cannot reclaim ElementId(N)),进而令 interpreter 的节点表失步(RawInterpreter.run 崩溃
Cannot read properties of undefined (reading 'listening')),此后所有点击
事件处理失效(表现为“列表点不动“)。前台页面虽同样挂起,但前台内部导航
不卸载 FrontendLayout 的 boundary,触发不了该路径;admin 侧只有本页挂起。
上游 master 的 suspense 卸载逻辑与 0.7.10 相同(未修复);若日后升级
dioxus 修复了此 bug,可考虑改回挂起式取数以恢复 SSR 数据内嵌。
Re-exports§
pub use PostPreview_completions::Component::PostPreview;
Structs§
- Post
Preview Props - Properties for the
PostPreviewcomponent.
Functions§
- Post
Preview - 草稿/文章预览页面组件(管理员只读),对应路由
/admin/preview/:slug。