Checkbox

Checkboxes allow users to select multiple items from a list of individual items, or to mark one individual item as selected.

installyarn add @react-spectrum/checkbox
version3.0.0-rc.2
usageimport {Checkbox} from '@react-spectrum/checkbox'

Example#


<Checkbox>Unsubscribe</Checkbox>
<Checkbox>Unsubscribe</Checkbox>
<Checkbox>
  Unsubscribe
</Checkbox>

Content#


Checkboxes accept children, which are rendered as the label.

Accessibility#

In certain cases a visible label isn't needed. For example, a checkbox used to select a table row. If a visible label isn't specified, an aria-label must be provided to the Checkbox for accessibility. If the field is labeled by a separate element, an aria-labelledby prop must be provided using the id of the labeling element instead.

Internationalization#

To internationalize a Checkbox, a localized label should be passed to the children or aria-label prop. For languages that are read right-to-left (e.g. Hebrew and Arabic), the layout of the checkbox is automatically flipped.

Value#


Checkboxes are not selected by default. The defaultSelected prop can be used to set the default state (uncontrolled). Alternatively, the isSelected prop can be used to make the selected state controlled. See React's documentation on uncontrolled components for more info.

function Example() {
  let [selected, setSelected] = React.useState(true);

  return (
    <Flex flexDirection="row">
      <Checkbox defaultSelected>Subscribe (uncontrolled)</Checkbox>
      <Checkbox isSelected={selected} onChange={setSelected}>
        Subscribe (controlled)
      </Checkbox>
    </Flex>
  );
}
function Example() {
  let [selected, setSelected] = React.useState(true);

  return (
    <Flex flexDirection="row">
      <Checkbox defaultSelected>
        Subscribe (uncontrolled)
      </Checkbox>
      <Checkbox
        isSelected={selected}
        onChange={setSelected}>
        Subscribe (controlled)
      </Checkbox>
    </Flex>
  );
}
function Example() {
  let [
    selected,
    setSelected
  ] = React.useState(
    true
  );

  return (
    <Flex flexDirection="row">
      <Checkbox
        defaultSelected>
        Subscribe
        (uncontrolled)
      </Checkbox>
      <Checkbox
        isSelected={
          selected
        }
        onChange={
          setSelected
        }>
        Subscribe
        (controlled)
      </Checkbox>
    </Flex>
  );
}

Indeterminate#

View guidelines

A Checkbox can be in an indeterminate state, controlled using the isIndeterminate prop. This overrides the appearance of the Checkbox, whether selection is controlled or uncontrolled. The Checkbox will visually remain indeterminate until the isIndeterminate prop is set to false, regardless of user interaction.

<Checkbox isIndeterminate>Subscribe</Checkbox>
<Checkbox isIndeterminate>Subscribe</Checkbox>
<Checkbox
  isIndeterminate>
  Subscribe
</Checkbox>

Events#


Checkboxes accept a user defined onChange prop, triggered whenever the Checkbox is clicked. The example below uses onChange to alert the user to changes in the checkbox's state.

function Example() {
  let [selected, setSelection] = React.useState(false);

  return (
    <Flex flexDirection="column">
      <Checkbox isSelected={selected} onChange={setSelection}>
        Subscribe
      </Checkbox>
      <View>{`You are ${selected ? 'subscribed' : 'unsubscribed'}`}</View>
    </Flex>
  );
 }
function Example() {
  let [selected, setSelection] = React.useState(false);

  return (
    <Flex flexDirection="column">
      <Checkbox
        isSelected={selected}
        onChange={setSelection}>
        Subscribe
      </Checkbox>
      <View>{`You are ${
        selected ? 'subscribed' : 'unsubscribed'
      }`}</View>
    </Flex>
  );
}
function Example() {
  let [
    selected,
    setSelection
  ] = React.useState(
    false
  );

  return (
    <Flex flexDirection="column">
      <Checkbox
        isSelected={
          selected
        }
        onChange={
          setSelection
        }>
        Subscribe
      </Checkbox>
      <View>{`You are ${
        selected
          ? 'subscribed'
          : 'unsubscribed'
      }`}</View>
    </Flex>
  );
}

Validation#


Checkboxes can display a validation state to communicate to the user if the current value is invalid. Implement your own validation logic in your app and pass "invalid" to the Checkbox via the validationState prop.

<Checkbox validationState="invalid">I accept the terms and conditions</Checkbox>
<Checkbox validationState="invalid">
  I accept the terms and conditions
</Checkbox>
<Checkbox validationState="invalid">
  I accept the terms
  and conditions
</Checkbox>

Props#


NameTypeDefaultDescription
isEmphasizedbooleanThis prop sets the emphasized style which provides visual prominence.
isIndeterminatebooleanIndeterminism is presentational only. The indeterminate visual representation remains regardless of user interaction.
childrenReactNode
defaultSelectedboolean
isSelectedboolean
valuestring
namestring
isDisabledbooleanWhether the input is disabled.
isRequiredbooleanWhether user input is required on the input before form submission. Often paired with the necessityIndicator prop to add a visual indicator to the input.
validationStateValidationStateWhether the input should display its "valid" or "invalid" visual styling.
isReadOnlybooleanWhether the input can be selected but not changed by the user.
autoFocusbooleanWhether the element should receive focus on render
UNSAFE_classNamestring
UNSAFE_styleCSSProperties
Events
NameTypeDefaultDescription
onChange( (isSelected: 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
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-controlsstringIdentifies the element (or elements) whose contents or presence are controlled by the current element.
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.
aria-errormessagestringIdentifies the element that provides an error message for the object.

Visual Options#


isDisabled#

View guidelines

<Checkbox isDisabled>Subscribe</Checkbox>
<Checkbox isDisabled>Subscribe</Checkbox>
<Checkbox isDisabled>
  Subscribe
</Checkbox>

isEmphasized#

View guidelines

<Checkbox isEmphasized defaultSelected>Subscribe</Checkbox>
<Checkbox isEmphasized defaultSelected>Subscribe</Checkbox>
<Checkbox
  isEmphasized
  defaultSelected>
  Subscribe
</Checkbox>