Skip to content

@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 对齐)
keepAlivetrue 时进入可选组件缓存池(默认关,上限 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。

精简版默认可用;完整壳需显式启用并配置私服。