• 简体中文
  • 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

    属性类型默认值说明
    itemsreadonly TabItem[]必填标签页列表
    activeKey / defaultActiveKeystring首个可用项受控激活项 / 初始项
    onChange(key: string) => void—激活项变化
    type'line' | 'card''line'标签形态
    placement'top' | 'left''top'标签栏位置
    size'sm' | 'md' | 'lg''md'标签尺寸
    activationMode'automatic' | 'manual''automatic'方向键直接激活 / 回车或空格激活
    destroyInactivebooleanfalse切走时卸载内容
    extraReactNode—标签栏附加内容
    onClose(key: string, event: MouseEvent<HTMLButtonElement>) => void—请求关闭,由应用移除 items 中的项;可阻止默认切换

    TabItem

    属性类型默认值说明
    keystring必填唯一标识
    labelReactNode必填标签名称
    childrenReactNode必填对应内容
    iconReactNode—前置图标
    disabledbooleanfalse禁用该标签页
    closablebooleanfalse展示关闭按钮,需配合 onClose

    类型

    定义组件属性或组装列表时可导入相关类型。

    import type { TabsProps, TabItem } from '@sudden3/leaf-ui';

    使用说明

    内容首次访问时挂载,默认保留访问过的内容和输入状态。方向键会跳过禁用项,Home / End 跳至首尾;manual 模式适合内容切换需要等待的场景。