主题
@selrux/shell/config
在 src/app.tsx 模块顶层调用,于路由树初始化前生效。
configureShellAuth
见 认证接入。
configureShellRouteMeta
覆盖已有路由的展示/权限字段(title、order、roles、activeMenu、图标等),不新增路径。键为绝对路径模式(如 /users/$id)。
覆盖优先级
生成默认(pages)→ configureShellRouteMeta[path] → 运行时 registry。覆盖不能改 name / path / children。
| 字段 | 说明 |
|---|---|
title / i18nKey | 菜单与 Tabs 静态文案(无运行时标题时) |
order / icon / localIcon | 菜单展示 |
hideInMenu | 不进菜单;带动态参数的页默认隐藏 |
activeMenu | 隐藏项高亮的菜单 name(如详情 → users) |
constant / roles | 访问规则(与 Access 对齐) |
keepAlive | true 时进入可选组件缓存池(默认关,上限 8) |
shell: true 时 generate 写出 src/.selrux/shell-route-catalog.ts,增强 ShellKnownRoutePaths / ShellKnownRouteNames:
- TypeScript 可对错误 path 键报错
- 运行时:目录登记后,未知 path 或失效
activeMenu会抛出明确错误
动态路径键
文件 pages/users/[id].tsx → 模式键 /users/$id(不是 /users/42)。实例 URL 只用于页签身份与动态标题,不作为 configureShellRouteMeta 的键。
HMR
configureShellRouteMeta 在模块顶层求值;改元数据后需刷新或重启 dev,不保证所有菜单/Tabs 组件自动热更新。增删 pages 由 generate/dev 重写 catalog 与路由树。
动态页签标题
静态 title 只描述路由模式;详情等实例标题按**页签 id(通常为 fullPath)**写入,不回写 RouteMetaRecord。
| API | 用途 |
|---|---|
setShellTabTitle(title, tabId) | 更新指定页签;页签已关闭则丢弃 |
resetShellTabTitle(tabId) | 恢复该页签静态标题 |
useShellTabTitle(title) | 同步绑定当前活动页签;卸载时回退 |
useShellTabTitleAsync(loader, deps) | 异步加载;AbortSignal + 页签存在性双重防迟到覆盖 |
tsx
import { useShellTabTitleAsync } from '@selrux/shell/config';
useShellTabTitleAsync(async signal => {
const user = await fetchUser(id, { signal });
return user.name;
}, [id]);configureShellRoutes / registerShellRouteCatalog
框架 codegen 写入;应用层优先依赖约定生成,勿手写替代 pages。
registerShellIcons
补充 Iconify 白名单;未知名称回退本地占位,不请求公共 API。
脏页签离开
| API | 用途 |
|---|---|
useShellTabDirty(dirty) | 绑定当前活动页签脏状态 |
enableShellTabLeaveGuard(registerNavigateExtension) | 站内 pathname 变化时确认 |
configureShellTabLeaveConfirm | 自定义确认 UI(测试可注入) |
关闭/批量关闭内置确认;退出会话抑制确认。详见 主题与 Tabs。