fix(admin): 修复首次进入系统后点击任意导航被拉回 dashboard #67

Merged
wangziqi merged 1 commits from fix/route-redirect-keepalive into main 2026-08-10 01:44:03 +00:00
Owner

问题

首次进入系统(访问根路径 /)后,点击任意菜单/按钮都会被强制拉回 /dashboard,刷新页面后才恢复正常。

根因

RouteKeeper(路由保活)会把首页 index 节点缓存并保持挂载,DefaultRoute 中的声明式 <Navigate> 会随缓存节点在后续每次路由变化时重新触发 replace,把当前页面强制替换回落地页;刷新后不再经过 /,缓存中无该节点,所以恢复正常。

修复

apps/admin/src/components/DefaultRoute.tsx:改为 effect 导航,仅在确实处于 / 且已算出落地页时跳转一次(navigate 用 ref 持有避免 effect 空转)。同时新增集成测试覆盖「首次进入 / → 跳转一次 → 后续导航不被劫持 → 回到 / 仍能重定向」。

验证

  • 修复前:浏览器实测 26 个菜单点击全部被拉回 /dashboard
  • 修复后:26 个菜单点击全部正常跳转
  • 全量前端测试 176 个用例通过,typecheck/lint 通过
## 问题 首次进入系统(访问根路径 `/`)后,点击任意菜单/按钮都会被强制拉回 `/dashboard`,刷新页面后才恢复正常。 ## 根因 `RouteKeeper`(路由保活)会把首页 index 节点缓存并保持挂载,`DefaultRoute` 中的声明式 `<Navigate>` 会随缓存节点在后续每次路由变化时重新触发 `replace`,把当前页面强制替换回落地页;刷新后不再经过 `/`,缓存中无该节点,所以恢复正常。 ## 修复 `apps/admin/src/components/DefaultRoute.tsx`:改为 effect 导航,仅在确实处于 `/` 且已算出落地页时跳转一次(`navigate` 用 ref 持有避免 effect 空转)。同时新增集成测试覆盖「首次进入 `/` → 跳转一次 → 后续导航不被劫持 → 回到 `/` 仍能重定向」。 ## 验证 - 修复前:浏览器实测 26 个菜单点击全部被拉回 `/dashboard` - 修复后:26 个菜单点击全部正常跳转 - 全量前端测试 176 个用例通过,typecheck/lint 通过
wangziqi added 1 commit 2026-08-10 01:43:33 +00:00
fix(admin): 修复首次进入系统后点击任意导航被拉回 dashboard
Some checks failed
CI / check (pull_request) Failing after 2m14s
ce9bde35eb
根因:RouteKeeper 保活缓存了首页 index 节点,DefaultRoute 中的声明式
<Navigate> 会随缓存节点在后续路由变化时反复触发 replace,导致所有导航
被强制拉回落地页(dashboard),刷新后因不再经过 / 而恢复正常。

修复:DefaultRoute 改为 effect 导航,仅在确实处于 / 且已算出落地页时
跳转一次;navigate 通过 ref 持有避免 effect 空转。新增集成测试覆盖
「首次进入 / → 跳转一次 → 后续导航不被劫持 → 回到 / 仍能重定向」。
wangziqi merged commit 4c95de2e56 into main 2026-08-10 01:44:03 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangziqi/gongxue-base#67
No description provided.