You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Detail-page tab strip resets to "Details" on any URL search-param change (uncontrolled PageTabsRenderer) — make tab state URL-driven (ADR-0054 C3) #2257
Activity
os-zhuang commentedon Jul 5, 2026
根因诊断补充(mount 探针 + StrictMode A/B 对照,浏览器实测):
"任何 URL 参数变化都重挂载"是 dev-only(StrictMode)伪影——同一操作序列(Related tab → 打开
?form=overlay → Esc):RecordDetailView/SchemaRenderer(page:tabs)/PageTabsRenderer三层探针零 UNMOUNT,tab 保留;RecordDetailView整树 UNMOUNT→REMOUNT(连环两轮),tab 重置。因此生产用户不受
?recordId=/?form=/ 命令面板这类 URL 变化影响;但生产真实存在的触发面仍有两个:AppContent的<RecordDetailView key={refreshKey}>(顶层编辑保存后 bump)和RecordDetailView的<DetailView key={actionRefreshKey}>(记录 action 执行后 bump)——这两条在生产也会整树重建、丢 tab。修复(#2267)按原方案 URL 化(
?tab=,ADR-0054 C3):状态搬出组件后对上述两类触发全部免疫,并顺带获得深链/刷新保留。dev 体验(StrictMode 下的 URL churn)同样修复。StrictMode 下 URL 变化为何重挂载 RecordDetailView(疑与 lazy + Suspense + router transition 的组合有关)可另行深挖,但已不阻塞本 issue。Generated by Claude Code
feat(components,plugin-detail,app-shell): URL-driven record detail ta…