Button 按钮
@lark-ui/core
import { Button, LarkIcon } from "@lark-ui/core";

export function ButtonBasicDemo() {
  return (
    <div className="flex flex-wrap items-center gap-2">
      <Button variant="secondary">按钮</Button>
      <Button
        variant="secondary"
        shape="square"
        icon={<LarkIcon name="plus" />}
        aria-label="添加"
      />
    </div>
  );
}

安装

统一导出

import { Button } from "@lark-ui/core";

按需导出

import { Button } from "@lark-ui/core/components/button";

用法

import { Button } from "@lark-ui/core";

export default function Example() {
  return <Button variant="secondary">Click me</Button>;
}

示例

变体

主要

import { Button } from "@lark-ui/core";

export function ButtonPrimaryDemo() {
  return <Button variant="primary">主要</Button>;
}

次要

import { Button } from "@lark-ui/core";

export function ButtonSecondaryDemo() {
  return <Button variant="secondary">次要</Button>;
}

幽灵

import { Button } from "@lark-ui/core";

export function ButtonGhostDemo() {
  return <Button variant="ghost">幽灵</Button>;
}

危险

import { Button } from "@lark-ui/core";

export function ButtonDestructiveDemo() {
  return <Button variant="destructive">危险</Button>;
}

描边

import { Button } from "@lark-ui/core";

export function ButtonOutlineDemo() {
  return <Button variant="outline">轮廓</Button>;
}

次要危险

import { Button } from "@lark-ui/core";

export function ButtonSecondaryDestructiveDemo() {
  return <Button variant="secondary-destructive">次要危险</Button>;
}

尺寸

import { Button } from "@lark-ui/core";

export function ButtonSizesDemo() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button size="xs" variant="secondary">
        极小
      </Button>
      <Button size="sm" variant="secondary">
        小
      </Button>
      <Button size="base" variant="secondary">
        标准
      </Button>
      <Button size="lg" variant="secondary">
        大
      </Button>
    </div>
  );
}

带图标

import { Button, LarkIcon } from "@lark-ui/core";

export function ButtonWithIconDemo() {
  return (
    <Button variant="secondary" icon={<LarkIcon name="plus" />}>
      新建文档
    </Button>
  );
}

仅图标

对于仅含图标的按钮,请结合 icon 属性使用 shape="square" 或 shape="circle"。 务必提供 aria-label 以满足无障碍要求——没有可见文字时,屏幕阅读器需要依靠该标签来传达按钮的用途。

import { Button, LarkIcon } from "@lark-ui/core";

export function ButtonIconOnlyDemo() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button
        variant="secondary"
        shape="square"
        icon={<LarkIcon name="plus" />}
        aria-label="添加项"
      />
      <Button
        variant="secondary"
        shape="circle"
        icon={<LarkIcon name="plus" />}
        aria-label="添加项"
      />
    </div>
  );
}

加载状态

import { Button } from "@lark-ui/core";

export function ButtonLoadingDemo() {
  return (
    <Button variant="primary" loading>
      加载中...
    </Button>
  );
}

禁用状态

import { Button } from "@lark-ui/core";

export function ButtonDisabledDemo() {
  return (
    <Button variant="secondary" disabled>
      禁用
    </Button>
  );
}

标题

使用 title 属性可为按钮包裹一层工具提示。这对于仅含图标的按钮、禁用的按钮,或任何需要补充上下文来帮助用户理解操作行为的场景都很有用。

import { Button, LarkIcon } from "@lark-ui/core";

/** 演示在启用状态、仅图标和禁用状态的按钮(Button)上使用 title 工具提示。 */
export function ButtonTitleDemo() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button variant="secondary" title="新建文档">
        新建文档
      </Button>
      <Button
        variant="secondary"
        shape="square"
        icon={<LarkIcon name="plus" />}
        aria-label="添加项"
        title="添加项"
      />
      <Button variant="secondary" title="你需要编辑权限才能创建文档" disabled>
        新建文档
      </Button>
    </div>
  );
}

链接形式的按钮

当交互需要跳转到其他位置、但外观仍应像按钮时,请使用 LinkButton。而提交、打开或切换界面等原地操作请使用 Button。

import { LinkButton, LarkIcon } from "@lark-ui/core";

/** 演示使用 LinkButton 实现外观类似按钮的导航操作。 */
export function ButtonLinkAsButtonDemo() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <LinkButton href="/components/link" variant="secondary">
        阅读 Link 文档
      </LinkButton>
      <LinkButton
        href="https://developers.cloudflare.com"
        variant="ghost"
        icon={<LarkIcon name="arrow-square-out" />}
        external
      >
        Lark 文档
      </LinkButton>
    </div>
  );
}

带工具提示的链接

与 Button 一样,给 LinkButton 传入 title 即可为它包裹工具提示,在悬停和聚焦时展示额外上下文。

import { LinkButton } from "@lark-ui/core";

/** 演示在启用状态的 LinkButton 上使用 title 工具提示。 */
export function ButtonLinkTooltipDemo() {
  return (
    <LinkButton
      href="/components/link"
      variant="secondary"
      title="打开 Link 组件文档"
    >
      阅读 Link 文档
    </LinkButton>
  );
}

禁用的链接

在 LinkButton 上设置 disabled,即可渲染出外观像链接、但不可交互的按钮。通过 title 配合工具提示说明它不可用的原因。

import { LinkButton } from "@lark-ui/core";

/** 演示禁用状态的 LinkButton,并用 title 工具提示说明禁用的原因。 */
export function ButtonDisabledLinkDemo() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <LinkButton href="/components/link" variant="secondary" disabled>
        禁用的链接
      </LinkButton>
      <LinkButton
        href="/components/link"
        variant="secondary"
        disabled
        title="你需要编辑权限才能继续"
      >
        带提示的禁用状态
      </LinkButton>
    </div>
  );
}

API 参考

属性类型默认值说明
shape"base" | "square" | "circle""base"-
size"xs" | "sm" | "base" | "lg""base"-
compactSize"xs" | "sm" | "base" | "lg"--
variant"primary" | "secondary" | "ghost" | "destructive" | "secondary-destructive" | "outline""secondary"-
classNamestring-额外的 CSS 类名
childrenReactNode-子元素
iconIcon | ReactNode-来自 `@phosphor-icons/react` 的图标或 React 元素。渲染在子元素之前。