组件 · 通用
Button 动作按钮
用于查询、保存、提交等动作;loading 只描述外部受控忙碌状态,阻止再次激活并保留动作名称与焦点。页面跳转应使用链接语义,不要把按钮当正文链接。
何时使用
- 用于提交表单、保存、删除等需要用户明确触发的即时动作。
- 同一区域只放一个
solid主操作,其余用outline/ghost降低层级。 - 页面跳转使用链接语义;可用
buttonVariants()为原生链接提供按钮外观。
颜色、展示方式、尺寸彼此独立。激活、禁用与 loading 拦截由 Headless Button 承担,UI 提供主题外观与忙碌图标。
loading 由调用方受控。未提供 size 时读取最近的 ConfigProvider.size,无配置时使用 md;显式 size 优先。
引入
从 @selrux/ui/button 引入 Button。组件样式随入口自动引入,无需额外导入全量样式。
需要统一尺寸、语言或主题时,使用 @selrux/ui/config-provider 的 ConfigProvider;基础按钮不要求额外 provider。
演练场
调节语义色、展示方式、尺寸与加载等属性,实时预览真实 Button。
代码演示
查询按钮
基础用法
默认语义色为 primary,展示方式为 solid。没有配置域时尺寸为 md。
语义色
八个实底语义色。destructive 默认引用 error,不另造品牌色;实底除 secondary、accent 外为白字,随前景 Token 调整。
展示方式
四种展示方式可与语义色组合。纯样式函数的非法值回退默认;组件调用应由 TypeScript 检查合法值。
尺寸
六档视觉尺寸。未写 size 时读取最近 ConfigProvider 的 size;不存在 icon 或 default 尺寸档。
加载状态
loading 保留可见动作名称,忙碌标记跟在文字后;纯图标时替换图标槽。示例中的定时器仅模拟保存,实际业务应使用真实请求并在结束时恢复状态。
禁用状态
使用原生 disabled 属性禁用按钮。禁用按钮不能激活;不要仅通过 CSS 模拟禁用。
纯图标按钮
纯图标使用普通尺寸档,必须提供 aria-label。图文混排时图标与文字同放在子节点;示例附带完整 SVG,不依赖未定义图标。
API
Button
动作按钮。ref 指向实际的 button。
(props: ButtonProps & React.RefAttributes<HTMLButtonElement>) => React.ReactNode| 属性 | 类型 | 可选 | 默认值 / 证据 | 说明 | 来源 |
|---|---|---|---|---|---|
| color | "primary" | "destructive" | "success" | "warning" | "info" | "carbon" | "secondary" | "accent" | 是 | primary(语义色。省略为 primary。) | 语义色。省略为 primary。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| variant | "link" | "solid" | "outline" | "ghost" | 是 | solid(展示方式。省略为 solid。) | 展示方式。省略为 solid。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| size | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | 是 | 未声明;见说明/约束 | 尺寸。省略时使用 ConfigProvider,无配置时为 md。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| loading | boolean | 是 | false(为真时阻止再次激活,并保留动作名称和焦点。) | 为真时阻止再次激活,并保留动作名称和焦点。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| loadingLabel | string | 是 | 未声明;见说明/约束 | 忙碌辅助说明。省略时使用当前语言包。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| disabled | boolean | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| form | string | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| type | "button" | "submit" | "reset" | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| className | string | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| aria-label | string | 是 | 未声明;见说明/约束 | Defines a string value that labels the current element. | react-native: @types/react/index.d.ts |
| onClick | MouseEventHandler<HTMLButtonElement> | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| ref | Ref<HTMLButtonElement> | 是 | 未声明;见说明/约束 | Allows getting a ref to the component instance. Once the component unmounts, React will set ref.current to null (or call the ref with null if you passed a callback ref). | react-native: @types/react/index.d.ts |
| key | Key | null | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| children | ReactNode | 是 | 未声明;见说明/约束 | 按钮内容。图标作为子节点组合。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
其余 280 个 React 原生属性按继承汇总;关键原生属性已展开。
ButtonColor
八个实底语义色。destructive 默认引用 error,不另造第九个品牌色。
"primary" | "destructive" | "success" | "warning" | "info" | "carbon" | "secondary" | "accent"ButtonProps
动作按钮属性。loading 只描述外部受控的忙碌状态。
ButtonProps| 属性 | 类型 | 可选 | 默认值 / 证据 | 说明 | 来源 |
|---|---|---|---|---|---|
| color | "primary" | "destructive" | "success" | "warning" | "info" | "carbon" | "secondary" | "accent" | 是 | primary(语义色。省略为 primary。) | 语义色。省略为 primary。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| variant | "link" | "solid" | "outline" | "ghost" | 是 | solid(展示方式。省略为 solid。) | 展示方式。省略为 solid。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| size | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | 是 | 未声明;见说明/约束 | 尺寸。省略时使用 ConfigProvider,无配置时为 md。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| loading | boolean | 是 | false(为真时阻止再次激活,并保留动作名称和焦点。) | 为真时阻止再次激活,并保留动作名称和焦点。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| loadingLabel | string | 是 | 未声明;见说明/约束 | 忙碌辅助说明。省略时使用当前语言包。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
| disabled | boolean | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| form | string | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| type | "button" | "submit" | "reset" | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| className | string | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| aria-label | string | 是 | 未声明;见说明/约束 | Defines a string value that labels the current element. | react-native: @types/react/index.d.ts |
| onClick | MouseEventHandler<HTMLButtonElement> | 是 | 未声明;见说明/约束 | react-native: @types/react/index.d.ts | |
| children | ReactNode | 是 | 未声明;见说明/约束 | 按钮内容。图标作为子节点组合。 | ui: @selrux/ui/dist/types/components/button/button-props.d.ts |
其余 280 个 React 原生属性按继承汇总;关键原生属性已展开。
ButtonSize
六档视觉尺寸。默认档来自 ConfigProvider,无配置时为 md。
"xs" | "sm" | "md" | "lg" | "xl" | "2xl"ButtonVariant
展示方式。只开放实底、描边、弱化和链接。
"link" | "solid" | "outline" | "ghost"ButtonVariantOptions
buttonVariants 接受的颜色、变体和尺寸。
ButtonVariantOptions| 属性 | 类型 | 可选 | 默认值 / 证据 | 说明 | 来源 |
|---|---|---|---|---|---|
| color | "primary" | "destructive" | "success" | "warning" | "info" | "carbon" | "secondary" | "accent" | 是 | 未声明;见说明/约束 | 语义色。省略或非法时为 primary。 | ui: @selrux/ui/dist/types/components/button/button-variants.d.ts |
| variant | "link" | "solid" | "outline" | "ghost" | 是 | 未声明;见说明/约束 | 展示方式。省略或非法时为 solid。 | ui: @selrux/ui/dist/types/components/button/button-variants.d.ts |
| size | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | 是 | 未声明;见说明/约束 | 尺寸。省略或非法时为 md,不会读取 ConfigProvider。 | ui: @selrux/ui/dist/types/components/button/button-variants.d.ts |
| className | string | 是 | 未声明;见说明/约束 | 追加到结果末尾的类名。不做冲突合并。 | ui: @selrux/ui/dist/types/components/button/button-variants.d.ts |
其余 0 个 React 原生属性按继承汇总;关键原生属性已展开。
- loading 阻止再次激活并保留焦点;loading 的 submit 按钮不会再次提交表单。
- disabled 使用原生禁用语义。只有一个元素子节点时按纯图标按钮处理。
- 不支持旧属性 appearance、beforeClick、autoLoading、asChild,也不支持 variant="dashed"、variant="default"、size="default"、size="icon"。
- 当前状态为 preview;部分默认前景组合不承诺 4.5:1 对比度。调用方仍需检查实际主题。
事件
onClick 在激活时触发,loading 或 disabled 时由 Headless 拦截。其余原生事件 onFocus、onBlur、onKeyDown 等透传到实际 button。
buttonVariants
纯样式函数组合基础类、语义色、展示方式、尺寸与附加类,不读取 ConfigProvider,不处理事件。className 追加在末尾,不做冲突合并。
组合基础类、语义色、变体、尺寸和可选附加类。
(options?: ButtonVariantOptions) => stringimport { buttonVariants } from '@selrux/ui/button';
/** 保留原生链接语义,仅复用 Button 视觉类。 */
export function LinkButtonExample() {
return <a href="/docs" className={buttonVariants({ size: 'lg', variant: 'outline', className: 'extra' })}>阅读文档</a>;
}无障碍
- 渲染原生 button,支持 Tab 聚焦、Enter / Space 激活。
- loading 保留动作名称与焦点;忙碌辅助说明来自 loadingLabel 或当前语言包。
- 忙碌图标带 aria-hidden="true",避免读屏重复朗读;纯图标按钮必须提供 aria-label。
- 焦点环使用 --srx-focus-ring / --srx-focus-width Token,不能用全局样式移除。
相关组件
关联 ButtonGroup、ConfigProvider 与 Icon。主题编辑器和演练场可用于验证真实主题与组件组合。
文档快照:edbed4e3949112ae4797ba611a523984