#Tabs 标签页
在同一区域切换不同内容。
#基础用法
交互预览基础用法
查看项目活动、成员和最近更新。
查看项目活动、成员和最近更新。
查看项目活动、成员和最近更新。
basic.tsx
import { Input, type TabItem, Tabs } from '@sudden3/leaf-ui';
import { ChartNoAxesColumn, Settings } from 'lucide-react';
const items: readonly TabItem[] = [
{
key: 'overview',
label: '概览',
icon: <ChartNoAxesColumn />,
children: <p>查看项目活动、成员和最近更新。</p>,
},
{
key: 'settings',
label: '设置',
icon: <Settings />,
children: <Input aria-label="项目名称" placeholder="输入内容后切换,内容会保留" />,
},
{ key: 'history', label: '历史', disabled: true, children: null },
];
export function TabsBasic() {
return (
<div className="leaf-demo-stack leaf-demo-stack--wide">
<Tabs aria-label="项目信息" items={items} />
<Tabs items={items} type="card" size="sm" />
<Tabs items={items} placement="left" />
</div>
);
}
#可关闭标签页
交互预览可关闭标签页
项目一的内容
closable.tsx
import { Button, type TabItem, Tabs } from '@sudden3/leaf-ui';
import { useRef, useState } from 'react';
export function TabsClosable() {
const sequence = useRef(2);
const [items, setItems] = useState<TabItem[]>([
{ key: '1', label: '项目一', children: '项目一的内容', closable: true },
{ key: '2', label: '项目二', children: '项目二的内容', closable: true },
]);
return (
<Tabs
items={items}
type="card"
onClose={(key) => setItems((list) => list.filter((item) => item.key !== key))}
extra={
<Button
size="sm"
variant="outline"
onClick={() => {
const key = String(++sequence.current);
setItems((list) => [
...list,
{ key, label: `Project ${key}`, children: `Project ${key}`, closable: true },
]);
}}
>
新增
</Button>
}
/>
);
}
#Tabs API
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
items | readonly TabItem[] | 必填 | 标签页列表 |
activeKey / defaultActiveKey | string | 首个可用项 | 受控激活项 / 初始项 |
onChange | (key: string) => void | — | 激活项变化 |
type | 'line' | 'card' | 'line' | 标签形态 |
placement | 'top' | 'left' | 'top' | 标签栏位置 |
size | 'sm' | 'md' | 'lg' | 'md' | 标签尺寸 |
activationMode | 'automatic' | 'manual' | 'automatic' | 方向键直接激活 / 回车或空格激活 |
destroyInactive | boolean | false | 切走时卸载内容 |
extra | ReactNode | — | 标签栏附加内容 |
onClose | (key: string, event: MouseEvent<HTMLButtonElement>) => void | — | 请求关闭,由应用移除 items 中的项;可阻止默认切换 |
#TabItem
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
key | string | 必填 | 唯一标识 |
label | ReactNode | 必填 | 标签名称 |
children | ReactNode | 必填 | 对应内容 |
icon | ReactNode | — | 前置图标 |
disabled | boolean | false | 禁用该标签页 |
closable | boolean | false | 展示关闭按钮,需配合 onClose |
#类型
定义组件属性或组装列表时可导入相关类型。
import type { TabsProps, TabItem } from '@sudden3/leaf-ui';#使用说明
内容首次访问时挂载,默认保留访问过的内容和输入状态。方向键会跳过禁用项,Home / End 跳至首尾;manual 模式适合内容切换需要等待的场景。