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.1
usageimport {Checkbox} from '@react-spectrum/checkbox'

Example#


<Checkbox>Checkbox Label</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.

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.

<Checkbox defaultSelected>Uncontrolled</Checkbox>
<Checkbox isSelected>Controlled</Checkbox>

Indeterminate#

View guidelines

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

<Checkbox isIndeterminate>Checkbox Label</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');

  let toggle = (value) => {
    value ? setSelection('true') : setSelection('false');
  }

  return (
    <div>
      <div> The Checkbox is checked: {selected} </div>
      <Checkbox onChange={toggle}>
        Checkbox Label
      </Checkbox>
    </div>
  );
 }

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">Checkbox Label</Checkbox>

Props#


NameTypeDefaultDescription
isEmphasizedboolean

By default, checkboxes are not emphasized (gray). This prop sets the emphasized style (blue) which provides visual prominence.

isIndeterminateboolean

Indeterminism is presentational, when a checkbox is indeterminate, it overrides the selection state. The indeterminate visual representation remains even after subsequent clicks .

childrenReactNode
defaultSelectedboolean
isSelectedboolean
valuestring
namestring
isDisabledbooleanWhether the input is disabled.
isRequiredboolean

Whether user input is required on the input before form submission. Often paired with the necessityIndicator prop to add a visual indicator to the input.

validationState"valid"Whether 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: ) => voidHandler that is called when the element receives focus.
onBlur(e: ) => 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: ) => voidHandler that is called when a key is pressed.
onKeyUp(e: ) => 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
margin
marginTop
marginLeft
marginRight
marginBottom
marginStart
marginEnd
marginX
marginY
Sizing
NameTypeDefaultDescription
width
minWidth
maxWidth
height
minHeight
maxHeight
Positioning
NameTypeDefaultDescription
position'static' | 'relative' | 'absolute' | 'fixed' | 'sticky'
top
bottom
left
right
start
end
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#


isDisabled#

View guidelines

<Checkbox isDisabled>Checkbox Label</Checkbox>

isEmphasized#

View guidelines

<Checkbox isEmphasized>Checkbox Label</Checkbox>