ActionButton

ActionButtons allow users to perform an action or mark a selection. They’re used for similar, task-based options within a workflow, and are ideal for interfaces where buttons aren’t meant to draw a lot of attention.

installyarn add @react-spectrum/button
version3.0.0-rc.1
usageimport {ActionButton} from '@react-spectrum/button'

Example#


<ActionButton icon={<Edit />}>Edit</ActionButton>

Content#


ActionButtons can have a label, and icon, or both. An icon is provided by passing an icon component to the icon prop. A visible label can be provided by passing children.

<ActionButton>Label only</ActionButton>
<ActionButton icon={<Edit />}>Icon + Label</ActionButton>
<ActionButton icon={<Edit />} aria-label="Icon only" />

Accessibility#

If no visible label is provided (e.g. an icon only button), an alternative text label must be provided to identify the control for accessibility. This should be added using the aria-label prop.

Internationalization#

In order to internationalize an ActionButton, a localized string should be passed to the children or aria-label prop.

Events#


ActionButtons support user interactions via mouse, keyboard, and touch. You can handle all of these via the onPress prop.

The following example uses an onPress handler to update a counter stored in React state.

function Example() {
  let [count, setCount] = React.useState(0);

  return (
    <ActionButton icon={<Edit />} onPress={() => setCount(c => c + 1)}>{count} Edits</ActionButton>
  );
}

Props#


NameTypeDefaultDescription
isQuietbooleanWhether the ActionButton should be displayed with a quiet style.
isSelectedbooleanWhether the ActionButton should be displayed with a selected state.
isEmphasizedbooleanWhether the ActionButton should be displayed with a emphasized style.
holdAffordancebooleanWhether the ActionButton should be displayed with a hold icon.
isDisabledbooleanWhether the button is disabled
elementTypestringJSXElementConstructor<any>"button"The HTML element or React element used to render the button, e.g. "div", "a", or RouterLink.
childrenReactNodeThe content to display in the button.
hrefstringA URL to link to if elementType="a".
targetstringThe target window for the link.
UNSAFE_classNamestring
UNSAFE_styleCSSProperties
autoFocusbooleanWhether the element should receive focus on render
Events
NameTypeDefaultDescription
onPress(e: PressEvent) => voidCalled when the mouse or touch is released
onPressStart(e: PressEvent) => void
onPressEnd(e: PressEvent) => void
onPressChange(isPressed: boolean) => void
onPressUp(e: PressEvent) => void
onHover(e: HoverEvent) => void
onHoverEnd(e: HoverEvent) => void
onHoverChange(isHovering: boolean) => void
onFocus(e: FocusEvent) => voidHandler that is called when the element receives focus.
onBlur(e: FocusEvent) => voidHandler that is called when the element loses focus.
onFocusChange(isFocused: boolean) => voidHandler that is called when the element's focus status changes.
onKeyDown(e: KeyboardEvent) => voidHandler that is called when a key is pressed.
onKeyUp(e: KeyboardEvent) => voidHandler that is called when a key is released.
Layout
NameTypeDefaultDescription
flexstringnumberboolean
flexGrownumber
flexShrinknumber
flexBasisnumberstring
alignSelf'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'stretch'
justifySelf'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'left' | 'right' | 'stretch'
flexOrdernumber
gridAreastring
gridColumnstring
gridRowstring
gridColumnStartstring
gridColumnEndstring
gridRowStartstring
gridRowEndstring
slotstring
Spacing
NameTypeDefaultDescription
marginDimensionValue
marginTopDimensionValue
marginLeftDimensionValue
marginRightDimensionValue
marginBottomDimensionValue
marginStartDimensionValue
marginEndDimensionValue
marginXDimensionValue
marginYDimensionValue
Sizing
NameTypeDefaultDescription
widthDimensionValue
minWidthDimensionValue
maxWidthDimensionValue
heightDimensionValue
minHeightDimensionValue
maxHeightDimensionValue
Positioning
NameTypeDefaultDescription
position'static' | 'relative' | 'absolute' | 'fixed' | 'sticky'
topDimensionValue
bottomDimensionValue
leftDimensionValue
rightDimensionValue
startDimensionValue
endDimensionValue
zIndexnumber
isHiddenboolean
Accessibility
NameTypeDefaultDescription
rolestring
idstring
tabIndexnumber
aria-labelstringDefines a string value that labels the current element.
aria-labelledbystringIdentifies the element (or elements) that labels the current element.
aria-describedbystringIdentifies the element (or elements) that describes the object.
aria-controlsstringIdentifies the element (or elements) whose contents or presence are controlled by the current element.
aria-ownsstring

Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship between DOM elements where the DOM hierarchy cannot be used to represent the relationship.

aria-hiddenboolean'false''true'Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.

Visual Options#


Quiet#

View guidelines

<ActionButton isQuiet>Action!</ActionButton>

Selected#

View guidelines

<ActionButton isSelected>Action!</ActionButton>

Emphasis#

View guidelines

Note that the styling provided by the isEmphasized prop is only applied when the isSelected prop is true.

<ActionButton isEmphasized isSelected>Action!</ActionButton>

Hold Affordance#

View guidelines

<ActionButton holdAffordance icon={<Edit />} aria-label="Edit" />

Disabled#

View guidelines

<ActionButton isDisabled>Action!</ActionButton>