Breadcrumb
展示当前位置层级并支持跳转的面包屑导航组件
面包屑(Breadcrumb)用于展示当前页面在信息架构中的位置,帮助用户理解路径并快速返回上级页面。
import {
Breadcrumb,
BreadcrumbEllipsis,
BreadcrumbItemContent,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbRoot,
BreadcrumbSeparator
} from '@skyroc/web-ui';架构说明
Breadcrumb 是数据驱动组件,主组件接收 items 并自动渲染根导航、列表、条目、链接、当前页和分隔符。
BreadcrumbRoot:语义化nav容器,默认带aria-label="breadcrumb"。BreadcrumbList:有序列表容器。BreadcrumbItemContent:单个路径节点容器。BreadcrumbLink:可点击链接;当 item 有href时使用。BreadcrumbPage:当前页展示;当 item 没有href时使用。BreadcrumbEllipsis:折叠路径项的省略入口,可配合 DropdownMenu 展示隐藏项。
何时使用
- 页面存在明确层级路径,需要告诉用户当前位置。
- 用户需要从详情页、设置页或深层页面快速返回上级。
- 路径较长时需要折叠中间层级,并通过下拉菜单访问隐藏项。
- 需要在路径节点中加入图标、状态标签或自定义渲染内容。
基础用法
通过 items 传入路径数据。没有 href 的节点会渲染为当前页样式;有 href 的节点会渲染为链接。
自定义条目
通过 renderItem 自定义每个路径节点的渲染内容,适合接入路由组件或复杂节点。
自定义分隔符
通过 separator 替换默认的右箭头分隔符。
链接
当 item 中包含 href 时,组件会使用 BreadcrumbLink 渲染该节点。
折叠
设置 ellipsis 后,当条目数量大于 4 时,组件会折叠中间项,并用 DropdownMenu 展示被折叠的路径。
自定义折叠
通过 ellipsisIcon 替换省略图标;通过 renderEllipsis 可以完全自定义折叠入口。
下拉条目
通过 renderItem 结合 DropdownMenu,可以让某个路径节点本身成为下拉入口。
尺寸
通过 size 控制整体字号和间距,从 xs 到 2xl 共 6 个尺寸。
自定义样式
通过 classNames 控制 root、list、item、separator、ellipsis 等 slot。主组件的 classNames 不包含 link 和 page,这两个 slot 通过 linkProps 和 pageProps 单独传入。
API
Breadcrumb
通用属性参考:根容器基于 nav 元素,支持原生 nav 属性、size 和 className。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| items* | 面包屑数据列表 | BreadcrumbItem[] | - |
| size | 尺寸,影响字号与间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| ellipsis | 折叠配置;true 时条目数大于 4 自动折叠中间项 | true | [number, number] | null | - |
| ellipsisDropdownProps | 折叠项下拉菜单属性,不包含 children 和 items | Omit<DropdownMenuProps, 'children' | 'items'> | - |
| ellipsisIcon | 自定义折叠入口图标 | ReactNode | - |
| ellipsisProps | 传递给 BreadcrumbEllipsis 的额外 props | BreadcrumbEllipsisProps | - |
| handleItemClick | 点击路径项时触发 | (item: BreadcrumbItem) => void | - |
| renderEllipsis | 自定义折叠入口渲染 | (items: BreadcrumbItem[]) => ReactNode | - |
| renderItem | 自定义路径项内容渲染 | (item: BreadcrumbItem) => ReactNode | - |
| separator | 自定义分隔符 | ReactNode | - |
| className | 根容器 class | ClassValue | - |
| classNames | 各 slot 的自定义 class(不含 link / page) | Omit<BreadcrumbUi, 'link' | 'page'> | - |
| itemProps | 传递给 BreadcrumbItemContent 的额外 props | BreadcrumbItemProps | - |
| linkProps | 传递给 BreadcrumbLink 的额外 props | BreadcrumbLinkProps | - |
| listProps | 传递给 BreadcrumbList 的额外 props | BreadcrumbListProps | - |
| pageProps | 传递给 BreadcrumbPage 的额外 props | BreadcrumbPageProps | - |
| separatorProps | 传递给 BreadcrumbSeparator 的额外 props | BreadcrumbSeparatorProps | - |
| ref | 指向底层 nav 元素的 ref | Ref<HTMLElement> | - |
子组件
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| BreadcrumbRoot | 根导航容器 | BreadcrumbRootProps | - |
| BreadcrumbList | 有序列表容器 | BreadcrumbListProps | - |
| BreadcrumbItemContent | 单个路径项容器 | BreadcrumbItemProps | - |
| BreadcrumbLink | 路径链接,支持 asChild | BreadcrumbLinkProps | - |
| BreadcrumbPage | 当前页节点 | BreadcrumbPageProps | - |
| BreadcrumbSeparator | 分隔符节点 | BreadcrumbSeparatorProps | - |
| BreadcrumbEllipsis | 折叠入口节点 | BreadcrumbEllipsisProps | - |
类型
BreadcrumbProps<T extends BreadcrumbItem>
主组件属性。继承 BreadcrumbRootProps,并增加数据、折叠、渲染和 slot 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| className | ClassValue | 根容器 class。来自 BreadcrumbRootProps。 |
| classNames | Omit<BreadcrumbUi, 'link' | 'page'> | 主组件可配置 slot class。 |
| ellipsis | true | [number, number] | null | 折叠配置。true 时条目数大于 4 折叠中间项。 |
| ellipsisDropdownProps | Omit<DropdownMenuProps, 'children' | 'items'> | 折叠下拉菜单属性。 |
| ellipsisIcon | React.ReactNode | 折叠入口图标。 |
| ellipsisProps | BreadcrumbEllipsisProps | 折叠入口组件属性。 |
| handleItemClick | (item: T) => void | 点击路径项时触发。 |
| itemProps | BreadcrumbItemProps | 路径项容器属性。 |
| items* | T[] | 路径数据列表。 |
| linkProps | BreadcrumbLinkProps | 链接组件属性。 |
| listProps | BreadcrumbListProps | 列表容器属性。 |
| pageProps | BreadcrumbPageProps | 当前页组件属性。 |
| renderEllipsis | (items: T[]) => React.ReactNode | 自定义折叠入口渲染。 |
| renderItem | (item: T) => React.ReactNode | 自定义路径项内容渲染。 |
| separator | React.ReactNode | 分隔符内容。 |
| separatorProps | BreadcrumbSeparatorProps | 分隔符组件属性。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸。来自 BreadcrumbRootProps。 |
BreadcrumbItem
路径项数据结构。继承 BreadcrumbLinkProps 和 SlotProps。
| 字段 | 类型 | 说明 |
|---|---|---|
| asChild | boolean | 链接渲染时是否使用 asChild。来自 BreadcrumbLinkProps。 |
| className | ClassValue | 该路径项自定义 class。 |
| href | string | 链接地址。存在 href 时渲染为 BreadcrumbLink。 |
| label* | React.ReactNode | 显示内容。 |
| leading | React.ReactNode | 前置插槽内容。 |
| target | HTMLAttributeAnchorTarget | 链接打开方式。来自 a 元素属性。 |
| trailing | React.ReactNode | 后置插槽内容。 |
| value* | string | 唯一标识。 |
| ...React.AnchorHTMLAttributes<HTMLAnchorElement> | React.AnchorHTMLAttributes<HTMLAnchorElement> | 支持其余 a 元素属性。 |
BreadcrumbUi
Breadcrumb 全部 slot 的 class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| ellipsis | ClassValue | 折叠入口 class。 |
| item | ClassValue | 路径项容器 class。 |
| link | ClassValue | 链接 class。主组件 classNames 不直接接收该字段。 |
| list | ClassValue | 列表容器 class。 |
| page | ClassValue | 当前页 class。主组件 classNames 不直接接收该字段。 |
| root | ClassValue | 根容器 class。 |
| separator | ClassValue | 分隔符 class。 |
BreadcrumbRootProps
根容器属性,等价于 HTMLComponentProps<"nav">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 子节点。 |
| className | ClassValue | 根容器 class。 |
| id | string | DOM id。 |
| ref | Ref<HTMLElement> | nav 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响整体字号。 |
BreadcrumbListProps
列表容器属性,等价于 HTMLComponentProps<"ol">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 列表内容。 |
| className | ClassValue | 列表 class。 |
| ref | Ref<HTMLOListElement> | ol 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响列表间距。 |
BreadcrumbItemProps
路径项容器属性,等价于 HTMLComponentProps<"li">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 路径项内容。 |
| className | ClassValue | 路径项 class。 |
| ref | Ref<HTMLLIElement> | li 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响路径项间距。 |
BreadcrumbLinkProps
链接属性。继承 HTMLComponentProps<"a"> 并额外支持 asChild。
| 字段 | 类型 | 说明 |
|---|---|---|
| asChild | boolean | 使用 Radix Slot 将链接行为合并到子元素。 |
| children | React.ReactNode | 链接内容。 |
| className | ClassValue | 链接 class。 |
| href | string | 链接地址。 |
| ref | Ref<HTMLAnchorElement> | a 元素 ref。 |
| target | HTMLAttributeAnchorTarget | 链接打开方式。 |
BreadcrumbPageProps
当前页节点属性,等价于 HTMLComponentProps<"span">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 当前页内容。 |
| className | ClassValue | 当前页 class。 |
| ref | Ref<HTMLSpanElement> | span 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸属性。 |
BreadcrumbSeparatorProps
分隔符属性,等价于 HTMLComponentProps<"li">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 自定义分隔符内容。默认使用 ChevronRight。 |
| className | ClassValue | 分隔符 class。 |
| ref | Ref<HTMLLIElement> | li 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸属性。 |
BreadcrumbEllipsisProps
折叠入口属性,等价于 HTMLComponentProps<"span">。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | React.ReactNode | 自定义折叠图标。默认使用 Ellipsis。 |
| className | ClassValue | 折叠入口 class。 |
| ref | Ref<HTMLSpanElement> | span 元素 ref。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸属性。 |
SlotProps
路径项前后插槽类型。
| 字段 | 类型 | 说明 |
|---|---|---|
| leading | ReactNode | 前置插槽内容。 |
| trailing | ReactNode | 后置插槽内容。 |
BreadcrumbSlots
Breadcrumb 可配置 classNames 的 slot