Button 按钮

介绍

按钮用于触发一个操作,如提交表单。

引入

import { Button } from "@taroify/core"

代码演示

按钮颜色

按钮支持 defaultprimaryinfosuccesswarningdanger 六种颜色,默认为 default

<Button color="primary">主要按钮</Button>
<Button color="info">信息按钮</Button>
<Button color="success">成功按钮</Button>
<Button color="warning">警告按钮</Button>
<Button color="danger">危险按钮</Button>
<Button color="default">默认按钮</Button>

文本按钮

通过 variant="text" 属性将按钮设置为文本按钮。

<Button variant="text" color="primary">主要按钮</Button>
<Button variant="text" color="info">信息按钮</Button>
<Button variant="text" color="success">成功按钮</Button>
<Button variant="text" color="warning">警告按钮</Button>
<Button variant="text" color="danger">危险按钮</Button>
<Button variant="text" color="default">默认按钮</Button>

轮廓按钮

通过 variant="outlined" 属性将按钮设置为轮廓按钮。

<Button variant="outlined" color="primary">主要按钮</Button>
<Button variant="outlined" color="info">信息按钮</Button>
<Button variant="outlined" color="success">成功按钮</Button>
<Button variant="outlined" color="warning">警告按钮</Button>
<Button variant="outlined" color="danger">危险按钮</Button>
<Button variant="outlined" color="default">默认按钮</Button>

细边框

设置 hairline 属性可以展示 0.5px 的细边框。

<Button variant="outlined" color="primary" hairline>主要按钮</Button>
<Button variant="outlined" color="info" hairline>信息按钮</Button>
<Button variant="outlined" color="success" hairline>成功按钮</Button>
<Button variant="outlined" color="warning" hairline>警告按钮</Button>
<Button variant="outlined" color="danger" hairline>危险按钮</Button>
<Button variant="outlined" color="default" hairline>默认按钮</Button>

禁用状态

通过 disabled 属性来禁用按钮,禁用状态下按钮不可点击。

<Button variant="contained" color="primary" disabled>主要按钮</Button>
<Button variant="contained" color="info" disabled>信息按钮</Button>
<Button variant="contained" color="success" disabled>成功按钮</Button>
<Button variant="contained" color="warning" disabled>警告按钮</Button>
<Button variant="contained" color="danger" disabled>危险按钮</Button>
<Button variant="contained" color="default" disabled>默认按钮</Button>

加载状态

通过 loading 属性设置按钮为加载状态,可以通过 { type: "spinner" } 设置加载类型。加载时会隐藏 icon 属性传入的业务图标;通过 loadingText 可以单独设置加载文案,不传时保留原按钮内容。

<Button color="success" loading />
<Button color="success" loading={{ type: "spinner" }} />
<Button color="primary" loading loadingText="加载中...">提交</Button>

按钮形状

通过 shape="square" 设置方形按钮,通过 shape="round" 设置圆形按钮。

<Button variant="contained" color="primary" shape="square">方形按钮</Button>
<Button variant="contained" color="primary" shape="round">圆形按钮</Button>

图标按钮

通过 icon 属性设置按钮图标,支持任意 React 节点。仅包含图标的按钮应通过 ariaLabel 提供用于无障碍阅读的名称。

<Button variant="contained" color="primary" icon={<DoneOutlined />} ariaLabel="完成" />
<Button variant="contained" color="primary" icon={<DoneOutlined />}>主要按钮</Button>
<Button variant="outlined" color="primary" icon={<DoneOutlined />} iconPosition="right">轮廓按钮</Button>

无障碍阅读

ariaLabel 用于为屏幕阅读器等辅助工具提供按钮名称,不会改变按钮的视觉效果。普通文本按钮会尝试从内容中自动提取名称;图标按钮没有可提取的文字,应显式设置 ariaLabel

<Button icon={<ShopOutlined />} ariaLabel="购物车" />

<Button.Group ariaLabel="分页操作">
  <Button>上一页</Button>
  <Button>下一页</Button>
</Button.Group>

Button.Group 默认声明为 group 语义,帮助屏幕阅读器识别一组相关操作。具体支持情况取决于目标 Taro 平台。

按钮尺寸

支持 largemediumsmallmini 四种尺寸,默认为 medium

<Button color="primary" size="large">大号按钮</Button>
<Button color="primary" size="medium">普通按钮</Button>
<Button color="primary" size="small">小型按钮</Button>
<Button color="primary" size="mini">迷你按钮</Button>

块级元素

按钮在默认情况下为行内块级元素,通过 block 属性可以将按钮的元素类型设置为块级元素。

<Button color="primary" block>块级按钮</Button>

自定义颜色

通过 color 属性可以自定义按钮颜色。渐变色适用于 contained 按钮。

<Button color="#7232dd">单色按钮</Button>
<Button variant="outlined" color="#7232dd">轮廓按钮</Button>
<Button color="linear-gradient(to right, #ff6034, #ee0a24)">渐变色按钮</Button>

微信开放能力

Button 继承了 Taro 原生 Button 的属性,可以通过 openType 使用微信小程序开放能力。JSX 中需要使用驼峰写法,例如原生小程序的 open-typebindgetphonenumber 分别写为 openTypeonGetPhoneNumber

<Button
  openType="getPhoneNumber"
  onGetPhoneNumber={(event) => {
    console.log(event.detail.code)
  }}
>
  获取手机号
</Button>

<Button openType="contact">联系客服</Button>

<Button
  openType="chooseAvatar"
  onChooseAvatar={(event) => {
    console.log(event.detail.avatarUrl)
  }}
>
  选择头像
</Button>

<Button openType="share">分享</Button>

开放能力的可用范围、参数和回调由目标小程序平台决定,H5 等不支持对应能力的平台不会生效,具体请参考 Taro Button 文档

按钮组

<Button.Group variant="contained" color="primary" shape="round">
  <Button> <ArrowLeft /> 上一步</Button>
  <Button> <Replay /> 刷新</Button>
  <Button>下一步 <Arrow /></Button>
</Button.Group>

<Button.Group variant="outlined" shape="round" size="small">
  <Button> <ArrowLeft /> 上一步</Button>
  <Button><Replay /> 刷新</Button>
  <Button>下一步 <Arrow /></Button>
</Button.Group>

<Button.Group variant="text" color="primary" shape="round">
  <Button> <ArrowLeft /> 上一步</Button>
  <Button> <Replay /> 刷新</Button>
  <Button>下一步 <Arrow /></Button>
</Button.Group>

API

Props

参数说明类型默认值
variant按钮变种,可选值为 contained text outlinedstringcontained
color v1.0.1预设颜色或任意 CSS 颜色,预设值为 default primary info success warning dangerstringdefault
size尺寸,可选值为 large small ministringmedium
shape按钮形状,可选值为 square roundstring-
icon按钮图标ReactNode-
iconPosition图标展示位置,可选值为 rightstringleft
formType原生 button 标签的 type 属性stringbutton
block是否为块级元素booleanfalse
disabled是否禁用按钮booleanfalse
hairline是否使用 0.5px 边框booleanfalse
loading是否显示为加载状态或自定义加载图标boolean | LoadingProps | ReactElementfalse
loadingText v1.0.1加载状态文案ReactNode-
ariaLabel v1.0.1用于无障碍阅读的按钮名称,图标按钮建议显式设置string自动从内容提取
openType小程序开放能力,取值和相关事件请参考 Taro Buttonstring-
children按钮内容ReactNode-

除上述属性外,Button 还支持 Taro 原生 Button 的开放能力参数及事件,例如 onGetPhoneNumberonContactonChooseAvataronOpenSetting

Button.Group Props

参数说明类型默认值
variant按钮变种,可选值为 contained text outlinedstringcontained
color v1.0.1预设颜色或任意 CSS 颜色stringdefault
size尺寸,可选值为 large small ministringmedium
shape按钮形状,可选值为 roundstring-
block是否为块级元素boolean-
disabled是否禁用按钮boolean-
hairline是否使用 0.5px 边框boolean-
ariaLabel v1.0.1用于无障碍阅读的按钮组名称string-
role v1.0.1用于无障碍阅读的按钮组语义角色stringgroup

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
--button-line-height1.2-
--button-border-widthvar(--border-width-base)-
--button-border-radiusvar(--border-radius-sm)-
--button-border-radius-maxvar(--border-radius-max)-
--button-transition-durationvar(--animation-duration-fast)-
--button-active-opacity v1.0.10.1-
--button-disabled-opacityvar(--disabled-opacity)-
--button-outlined-background-color v1.0.1var(--background-color-2)-
--button-focus-visible-outline v1.0.12px * $hd solid var(--primary-color)-
--button-focus-visible-outline-offset v1.0.12px * $hd-
--button-icon-size v1.0.11.2em-
--button-content-gap v1.0.1var(--padding-base)-
--button-loading-icon-size20px * $hd-
--button-height-mini24px * $hd-
--button-padding-mini0 var(--padding-base)-
--button-font-size-minivar(--font-size-xs)-
--button-height-small32px * $hd-
--button-padding-small0 var(--padding-xs)-
--button-font-size-smallvar(--font-size-sm)-
--button-height-medium44px * $hd-
--button-padding-medium0 var(--padding-md)-
--button-font-size-mediumvar(--font-size-md)-
--button-height-large50px * $hd-
--button-font-size-largevar(--font-size-lg)-
--button-default-colorvar(--text-color)-
--button-default-background-colorvar(--background-color-2)-
--button-default-border-colorvar(--border-color)-
--button-primary-colorvar(--white)-
--button-primary-background-colorvar(--primary-color)-
--button-primary-border-colorvar(--button-primary-background-color)-
--button-info-colorvar(--white)-
--button-info-background-colorvar(--info-color)-
--button-info-border-colorvar(--button-info-background-color)-
--button-success-colorvar(--white)-
--button-success-background-colorvar(--success-color)-
--button-success-border-colorvar(--button-success-background-color)-
--button-warning-colorvar(--white)-
--button-warning-background-colorvar(--warning-color)-
--button-warning-border-colorvar(--button-warning-background-color)-
--button-danger-colorvar(--white)-
--button-danger-background-colorvar(--danger-color)-
--button-danger-border-colorvar(--button-danger-background-color)-