import { Breadcrumb } from "@chakra-ui/react"
const Demo = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Components</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
用法
import { Breadcrumb } from "@chakra-ui/react"
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link />
</Breadcrumb.Item>
<Breadcrumb.Separator />
</Breadcrumb.List>
</Breadcrumb.Root>
信息
如果您更喜欢封闭式组件组合,请查看下面的代码片段。示例
尺寸
使用 size
属性更改面包屑组件的尺寸
import { Breadcrumb, For, Stack } from "@chakra-ui/react"
const Demo = () => {
return (
<Stack>
<For each={["sm", "md", "lg"]}>
{(size) => (
<Breadcrumb.Root key={size} size={size}>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Components</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)}
</For>
</Stack>
)
}
变体
使用 variant
属性更改面包屑组件的外观
import { Breadcrumb, For, Stack } from "@chakra-ui/react"
const Demo = () => {
return (
<Stack>
<For each={["plain", "underline"]}>
{(variant) => (
<Breadcrumb.Root key={variant} variant={variant}>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Components</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)}
</For>
</Stack>
)
}
带分隔符
使用 Breadcrumb.Separator
组件添加自定义分隔符
import { Breadcrumb } from "@chakra-ui/react"
import { LiaSlashSolid } from "react-icons/lia"
const Demo = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<LiaSlashSolid />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Components</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<LiaSlashSolid />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
图标
通过在 Breadcrumb.Link
中渲染来为面包屑添加自定义图标
import { Breadcrumb } from "@chakra-ui/react"
import { LuHouse, LuShirt } from "react-icons/lu"
const Demo = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">
<LuHouse />
Home
</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="#">
<LuShirt />
Men Wear
</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Trousers</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
菜单
将 Breadcrumb.Link
包裹在 MenuTrigger
中,以确保它在菜单组件中正常工作
import { Breadcrumb, Menu, Portal } from "@chakra-ui/react"
import { LuChevronDown } from "react-icons/lu"
interface BreadcrumbMenuItemProps {
children: React.ReactNode
items: Array<{ label: string; value: string }>
}
const BreadcrumbMenuItem = (props: BreadcrumbMenuItemProps) => {
const { children, items } = props
return (
<Breadcrumb.Item>
<Menu.Root>
<Menu.Trigger asChild>{children}</Menu.Trigger>
<Portal>
<Menu.Positioner>
<Menu.Content>
{items.map((item) => (
<Menu.Item key={item.value} value={item.value}>
{item.label}
</Menu.Item>
))}
</Menu.Content>
</Menu.Positioner>
</Portal>
</Menu.Root>
</Breadcrumb.Item>
)
}
const Demo = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List gap="4">
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>/</Breadcrumb.Separator>
<BreadcrumbMenuItem
items={[
{ label: "Components", value: "components" },
{ label: "Props", value: "props" },
{ label: "Customization", value: "customization" },
]}
>
<Breadcrumb.Link as="button">
Components
<LuChevronDown />
</Breadcrumb.Link>
</BreadcrumbMenuItem>
<Breadcrumb.Separator>/</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
省略号
渲染 Breadcrumb.Ellipsis
组件以在面包屑项后显示省略号
import { Breadcrumb } from "@chakra-ui/react"
const Demo = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Docs</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="#">Components</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Ellipsis />
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.CurrentLink>Props</Breadcrumb.CurrentLink>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
路由库
使用 asChild
属性更改底层面包屑链接
import { Breadcrumb } from "@chakra-ui/react"
import { Link } from "next/link"
export const Example = () => {
return (
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link asChild>
<Link href="/docs">Docs</Link>
</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
</Breadcrumb.List>
</Breadcrumb.Root>
)
}
封闭组件
以下是如何为封闭组件组合设置面包屑。
import {
Breadcrumb as ChakraBreadcrumb,
Show,
type SystemStyleObject,
} from "@chakra-ui/react"
import * as React from "react"
export interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {
separator?: React.ReactNode
separatorGap?: SystemStyleObject["gap"]
items: Array<{ title: React.ReactNode; url?: string }>
}
export const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(
function BreadcrumbRoot(props, ref) {
const { separator, separatorGap, items, ...rest } = props
return (
<ChakraBreadcrumb.Root ref={ref} {...rest}>
<ChakraBreadcrumb.List gap={separatorGap}>
{items.map((item, index) => {
const last = index === items.length - 1
return (
<React.Fragment key={index}>
<ChakraBreadcrumb.Item>
<ChakraBreadcrumb.Link href={item.url}>
{item.title}
</ChakraBreadcrumb.Link>
</ChakraBreadcrumb.Item>
<Show
when={last}
fallback={
<ChakraBreadcrumb.Separator>
{separator}
</ChakraBreadcrumb.Separator>
}
>
<ChakraBreadcrumb.Item>
<ChakraBreadcrumb.CurrentLink>
{item.title}
</ChakraBreadcrumb.CurrentLink>
</ChakraBreadcrumb.Item>
</Show>
</React.Fragment>
)
})}
</ChakraBreadcrumb.List>
</ChakraBreadcrumb.Root>
)
},
)
如果您想自动将封闭组件添加到您的项目,请运行以下命令
npx @chakra-ui/cli snippet add breadcrumb
属性
根
属性 | 默认值 | 类型 |
---|---|---|
colorPalette | 'gray' | 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink' 组件的调色板 |
variant | 'plain' | 'underline' | 'plain' 组件的变体 |
size | 'md' | 'sm' | 'md' | 'lg' 组件的尺寸 |
separator | React.ReactNode | |
separatorGap | SystemStyleObject['gap'] | |
as | React.ElementType 要渲染的底层元素。 | |
asChild | ||
unstyled | boolean 是否移除组件的样式。 |