Skip to content

Navigator

Navigator 是基于 Radix NavigationMenu 的顶部导航组件,适合应用页头、官网导航、控制台横向导航和 Mega Menu。它负责导航项、当前项和悬浮面板交互;页头容器、吸顶和安全区请交给 Header

Basic

通过 items 可以快速创建链接和带下拉面板的导航。

常见场景

Header 组合

Header 负责外壳,Navigator 负责导航内容,两者组合时职责清晰。

Mega Menu

children 的导航项会渲染为触发器和面板,面板项支持图标、描述和链接。

受控当前项

activeKey 可与业务路由、查询参数或页面状态同步。

组合式 API

复杂结构可以使用 Navigator.ListNavigator.ItemNavigator.TriggerNavigator.ContentNavigator.Link 自由组合。

Usage

tsx
import { Header, Navigator } from "@ldkj/web-ui";

export function Example() {
  return (
    <Header
      brand={<span className="font-semibold">控制台</span>}
      nav={
        <Navigator
          defaultActiveKey="overview"
          items={[
            { key: "overview", label: "概览", href: "/overview" },
            {
              key: "workspace",
              label: "工作台",
              children: [
                {
                  key: "tasks",
                  label: "任务中心",
                  description: "跟进待办、审批和执行进度",
                  href: "/tasks",
                  icon: "article",
                },
              ],
            },
          ]}
        />
      }
    />
  );
}

API

继承 @radix-ui/react-navigation-menu Root 属性,支持 valuedefaultValueonValueChangeorientationdelayDurationskipDelayDuration 等。

属性说明类型默认值
items配置式导航项NavigatorItemConfig[]-
activeKey受控当前导航 keystring-
defaultActiveKey默认当前导航 keystring-
onActiveKeyChange当前导航变化回调(key: string) => void-
showViewport是否渲染 Radix Viewportbooleantrue
showIndicator是否渲染 Radix Indicatorbooleantrue
listProps透传给 Navigator.ListNavigatorListProps-
viewportProps透传给 Navigator.ViewportNavigatorViewportProps-
indicatorProps透传给 Navigator.IndicatorNavigatorIndicatorProps-
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
children组合式子组件React.ReactNode-
属性说明类型默认值
key导航项 key,未传时回退到 href 或索引string-
label导航项内容React.ReactNode-
description简短描述,常用于面板链接React.ReactNode-
icon本库图标名IconProps["name"]-
href普通链接地址string-
disabled是否禁用booleanfalse
content自定义下拉面板内容React.ReactNode-
children下拉面板链接配置NavigatorPanelItemConfig[]-
itemProps透传给 Navigator.ItemNavigatorItemProps-
triggerProps透传给 Navigator.TriggerNavigatorTriggerProps-
contentProps透传给 Navigator.ContentNavigatorContentProps-
linkProps透传给 Navigator.LinkNavigatorLinkProps-
属性说明类型默认值
key面板项 key,未传时回退到 href 或索引string-
label面板项标题React.ReactNode-
description面板项描述React.ReactNode-
icon本库图标名IconProps["name"]-
href链接地址string-
disabled是否禁用booleanfalse
span在默认面板网格中跨几列number-
linkProps透传给 Navigator.LinkNavigatorLinkProps-

Compound API

子组件说明
Navigator.List导航列表
Navigator.Item导航项容器
Navigator.Trigger带面板项的触发器
Navigator.Content下拉面板内容
Navigator.Link普通链接或面板链接
Navigator.ViewportRadix 面板视口
Navigator.Indicator触发器下方指示器

行为规则 / 优先级

  • Navigator 管导航交互,不管页头布局;需要品牌区、操作区、吸顶或安全区时组合 Header
  • activeKey 只表达当前导航项,不等同于 Radix Root 的 valuevalue 控制当前展开面板。
  • items 存在时优先渲染配置式导航;没有 items 时渲染 children
  • content 优先级高于 children,适合完全自定义面板。
  • showViewport=false 时不会渲染默认 Viewport,使用组合式 API 时需要自行处理面板容器。

Notes

  • Navigator 不内置业务路由;需要接入路由库时,在 hrefonClick 或组合式 Navigator.Link asChild 中处理。
  • 图标使用本库 Icon,组件源码不依赖 lucide-react
  • 顶部导航项不宜过多;超过横向空间时建议转为移动端菜单、侧边栏 Menu 或业务折叠入口。
  • 只有图标或含糊文案的导航项应补充可读文本或 aria-label