xfy
f86cb48efe
fix(post): 上下篇切换后正文内容不更新
承接 fix(post) 的路由重跑修复:标题/描述更新后,正文仍停留在旧文章。
根因:PostContent 用 use_memo 缓存 split_content_fragments 的结果,但 memo
依赖 ReactiveContext 追踪闭包内读取的 signal 才会重算。content_html 是普通
String prop,读取它不建立订阅——memo 永久缓存首次解析结果。上下篇切换时
content_html prop 已是新文章的 HTML,但 memo 返回旧 fragments,dangerous_inner_html
收到旧 html 字符串,diff 判断属性值未变 → 不生成 setAttribute 编辑 → 正文 DOM
停在旧文章。
标题/描述之所以正常更新:它们直接读 post(来自 use_server_future 的 Resource,
是 signal),不走 memo。
修复:去掉 use_memo,直接在 render 内调用 split_content_fragments(纯函数,
符合渲染纯净性)。每次渲染用当前 content_html 重新解析,diff 收到新 html →
正文 DOM 正确更新。
验证(headless chromium):
- 修复前:/post/rust 点 Next,标题变「写文章页面改为左右布局」,正文仍是
rust 的「第一步:定义世界」(红灯,复现)
- 修复后:正文随之变为「问题」(绿灯);prev 方向同样通过;首次 SSR 正常
2026-07-09 16:39:41 +08:00
..
2026-07-09 11:50:57 +08:00
2026-06-16 16:45:08 +08:00
2026-06-29 13:47:40 +08:00
2026-07-09 16:39:41 +08:00
2026-07-04 21:54:54 +08:00
2026-07-08 14:18:08 +08:00
2026-07-09 11:04:27 +08:00
2026-07-08 16:40:32 +08:00
2026-07-09 16:22:08 +08:00
2026-06-29 13:47:40 +08:00
2026-07-02 17:15:18 +08:00
2026-07-09 11:50:39 +08:00
2026-07-08 16:40:32 +08:00
2026-07-08 14:37:52 +08:00
2026-06-12 19:02:37 +08:00
2026-06-29 13:47:40 +08:00
2026-07-09 11:50:39 +08:00
2026-07-08 16:52:02 +08:00
2026-06-29 15:42:40 +08:00
2026-06-30 17:42:52 +08:00
2026-07-03 13:42:17 +08:00
2026-07-07 18:34:17 +08:00
2026-06-24 13:54:36 +08:00