101b31e073
上一版为防水合不一致加了 !mounted 中性首帧,反而制造了额外一段:一次 Cmd+R 走 裸 spinner(mounted=false)→ 应用外壳(乐观)→ 内容区(overview),三段重绘 = 用户看到的"刷新两次(先主显示区、后整页)"。 改:去掉 mounted gate;引导期(!ready)一律渲染 appShell(spinner)——外壳骨架 (顶栏/导航就位、内容区加载态)。因 render 期不读 localStorage/hasRefresh,SSR 与 客户端首帧一致、无水合不一致,静态 HTML 首帧即外壳。引导完成后只把内容区从 spinner 换成真实视图,顶栏/导航原地不动 → 刷新只有内容区一次替换,不再整页重绘。 代价:未登录用户刷新 /user/ 会先见外壳骨架再落登录页(极短、且随即要登录), 可接受;已登录用户(刷新的绝大多数场景)全程外壳稳定、无闪。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>