From e3e1d43d5dba2120efbac0b67fb10f3a79429222 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Wed, 8 Jul 2026 14:28:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(usercenter):=20=E5=88=B7=E6=96=B0=20/user/?= =?UTF-8?q?=20=E4=B8=8D=E5=86=8D=E5=85=88=E9=97=AA=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=A1=B5(=E5=BC=95=E5=AF=BC=E6=9C=9F=E4=B8=80=E5=BE=8B?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=80=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:静态导出 SSR 首屏读不到 localStorage(hasRefresh 服务端恒 false),旧守卫 !ready&&hasRefresh() 在此时为 false → 首屏渲染成登录页 → 刷新 /user/ 浏览器先显示 登录页 HTML,再水合+续期跳回面板(闪现);且 render 期调 hasRefresh 造成 SSR/客户端 不一致加剧闪现。 修:引导未完成(!ready)一律显示加载态(不读 localStorage、不渲染登录页),SSR 与 客户端首屏一致;引导完再定:已登录→面板、未登录/失败→登录页。刷新不再闪登录页。 Co-Authored-By: Claude Opus 4.8 --- web/usercenter/components/UserCenter.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/web/usercenter/components/UserCenter.tsx b/web/usercenter/components/UserCenter.tsx index ad89fe3..ba59124 100644 --- a/web/usercenter/components/UserCenter.tsx +++ b/web/usercenter/components/UserCenter.tsx @@ -124,17 +124,19 @@ export default function UserCenter() { setView('overview'); } - // 已登录(本地有 refresh token)但会话续期尚未完成:显示加载态而非登录页, - // 避免"先闪登录页再跳面板"(从官网带登录态进来时的 bug)。续期成功→面板、失败→登录页。 - if (!ready && hasRefresh()) { + // 引导(会话续期)未完成前一律显示加载态,不渲染登录页。关键:静态导出下 SSR 首屏 + // 读不到 localStorage(hasRefresh 服务端恒 false),若此时渲染登录页 → 刷新 /user/ 会 + // "先闪登录页再水合跳回面板"。且在 render 期调 hasRefresh() 会造成 SSR/客户端不一致。 + // 故引导期(!ready)只显示加载态(不读 localStorage),引导完再定:已登录→面板、 + // 未登录/续期失败→登录页。 + if (!ready) { return (
{t('loading')}
); } - // 无 refresh token(未登录)或续期失败:渲染登录页。 - if (!ready || !authed) { + if (!authed) { return ; }