主题
主题与 Tabs
主题(明暗、跟随系统、颜色、布局)由壳 UI 提供;不要在 selrux.config.ts 寻找 theme / tabs 字段。
Tabs 支持切换、关闭、固定、刷新;持久化页签元数据不等于组件保活。当前无 KeepAlive。
页签身份默认是 pathname(例如 /users/42),列表筛选写在 search 中时不新开页签,但会更新该页签的 fullPath,切回时可还原。multiTab 需配合 tabIdentityQueryKeys 才把指定 query 打进页签 id;未声明键时行为与默认相同。
KeepAlive(可选)
路由 meta keepAlive: true 时,内容区按页签 id 缓存组件,默认上限 8(LRU)。默认关闭(未设置 keepAlive 的页不入池)。
| 事件 | 行为 |
|---|---|
| 激活 / 停用 | 槽显示或隐藏;useShellKeepAliveActive / useShellKeepAliveEffect 可暂停订阅 |
| 刷新 | 仅重建当前 pathname 槽,其它缓存保留 |
| 关闭页签 | evictShellKeepAlive |
| 权限收紧 / 退出 | clearShellKeepAlive |
缓存页请用 useShellCachedParams / useShellFrozenRoute 读参数;不要依赖 TanStack useParams 在隐藏槽内仍正确。隐藏不等于卸载。
离开确认
编辑页等可调用 useShellTabDirty(true) 标记当前页签。关闭页签、批量关闭、站内跳到其它 pathname 时会弹一次确认;取消则保留页签与页面。enableShellTabLeaveGuard(registerNavigateExtension) 注册站内离开拦截。显式退出会抑制确认并清空脏标记。浏览器刷新/关页仅依赖原生 beforeunload,不承诺自定义文案。
动态标题
详情页等需要按实例改标题时,使用 useShellTabTitle / useShellTabTitleAsync(或 setShellTabTitle),按页签 id 隔离。离开或卸载后回退为路由静态 title。异步请求必须以 AbortSignal 或页签存在性校验丢弃旧结果,避免 /users/1 的迟到响应覆盖 /users/2。
菜单高亮与 Tabs 共用同一份路由元数据:hideInMenu + activeMenu 可让详情高亮列表菜单。见 菜单与图标 与 @selrux/shell/config。
主题抽屉与搜索首次打开时懒加载。