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.2
usageimport {ActionButton} from '@react-spectrum/button'

Example#


import {Text} from '@react-spectrum/typography';

<ActionButton>
  <Edit />
  <Text>Edit</Text>
</ActionButton>
import {Text} from '@react-spectrum/typography';

<ActionButton>
  <Edit />
  <Text>Edit</Text>
</ActionButton>
import {Text} from '@react-spectrum/typography';

<ActionButton>
  <Edit />
  <Text>Edit</Text>
</ActionButton>

Content#


ActionButtons can have a label, an icon, or both. An icon is provided by passing an icon component as a child to the ActionButton. A visible label can be provided by passing a string or a Text component as a child, depending on whether the ActionButton has an accompanying icon.

<ActionButton>
  Label only
</ActionButton>
<ActionButton>
  <Edit />
  <Text>Icon + Label</Text>
</ActionButton>
<ActionButton aria-label="Icon only">
  <Edit />
</ActionButton>
<ActionButton>
  Label only
</ActionButton>
<ActionButton>
  <Edit />
  <Text>Icon + Label</Text>
</ActionButton>
<ActionButton aria-label="Icon only">
  <Edit />
</ActionButton>
<ActionButton>
  Label only
</ActionButton>
<ActionButton>
  <Edit />
  <Text>
    Icon + Label
  </Text>
</ActionButton>
<ActionButton aria-label="Icon only">
  <Edit />
</ActionButton>

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 onPress={() => setCount((c) => c + 1)}>
      {count} Edits
    </ActionButton>
  );
}
function Example() {
  let [count, setCount] = React.useState(0);

  return (
    <ActionButton onPress={() => setCount((c) => c + 1)}>
      {count} Edits
    </ActionButton>
  );
}
function Example() {
  let [
    count,
    setCount
  ] = React.useState(0);

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

Props#


NameTypeDefaultDescription
isQuietbooleanWhether the ActionButton should be displayed with a quiet style.
holdAffordancebooleanWhether the ActionButton should be displayed with a hold icon.
type'button''submit''reset'"button"The behavior of the button when used in an HTML form.
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.
autoFocusbooleanWhether the element should receive focus on render
UNSAFE_classNamestring
UNSAFE_styleCSSProperties
Events
NameTypeDefaultDescription
onPress( (e: PressEvent )) => voidHandler that is called when the press is released over the target.
onPressStart( (e: PressEvent )) => voidHandler that is called when a press interaction starts.
onPressEnd( (e: PressEvent )) => voidHandler that is called when a press interaction ends, either over the target or when the pointer leaves the target.
onPressChange( (isPressed: boolean )) => voidHandler that is called when the press state changes.
onPressUp( (e: PressEvent )) => voidHandler that is called when a press is released over the target, regardless of whether it started on the target or not.
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
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
idstring
tabIndexnumber
aria-expandedbooleanIndicates whether the element, or another grouping element it controls, is currently expanded or collapsed.
aria-haspopupboolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element.
aria-controlsstringIdentifies the element (or elements) whose contents or presence are controlled by the current element.
aria-pressedbooleanIndicates the current "pressed" state of toggle buttons.
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-detailsstringIdentifies the element (or elements) that provide a detailed, extended description for the object.

Visual options#


Quiet#

View guidelines

<ActionButton isQuiet>Action!</ActionButton>
<ActionButton isQuiet>Action!</ActionButton>
<ActionButton isQuiet>
  Action!
</ActionButton>

Hold affordance#

View guidelines

<ActionButton holdAffordance aria-label="Edit">
  <Edit />
</ActionButton>
<ActionButton holdAffordance aria-label="Edit">
  <Edit />
</ActionButton>
<ActionButton
  holdAffordance
  aria-label="Edit">
  <Edit />
</ActionButton>

Disabled#

View guidelines

<ActionButton isDisabled>Action!</ActionButton>
<ActionButton isDisabled>Action!</ActionButton>
<ActionButton
  isDisabled>
  Action!
</ActionButton>