Checkbox
Checkboxes allow users to select multiple items from a list of individual items, or to mark one individual item as selected.
| install | yarn add @react-spectrum/checkbox |
|---|---|
| version | 3.0.0-rc.2 |
| usage | import {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] = ReactuseState(true);
return (
<Flex flexDirection="row">
<Checkbox defaultSelected>Subscribe (uncontrolled)</Checkbox>
<Checkbox isSelected=selected onChange=setSelected>
Subscribe (controlled)
</Checkbox>
</Flex>
);
}
function Example() {
let [selected setSelected] = ReactuseState(true);
return (
<Flex flexDirection="row">
<Checkbox defaultSelected>
Subscribe (uncontrolled)
</Checkbox>
<Checkbox
isSelected=selected
onChange=setSelected>
Subscribe (controlled)
</Checkbox>
</Flex>
);
}
function Example() {
let [
selected
setSelected
] = ReactuseState(
true
);
return (
<Flex flexDirection="row">
<Checkbox
defaultSelected>
Subscribe
(uncontrolled)
</Checkbox>
<Checkbox
isSelected=
selected
onChange=
setSelected
>
Subscribe
(controlled)
</Checkbox>
</Flex>
);
}
Indeterminate#
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] = ReactuseState(false);
return (
<Flex flexDirection="column">
<Checkbox isSelected=selected onChange=setSelection>
Subscribe
</Checkbox>
<View>`You are `</View>
</Flex>
);
}function Example() {
let [selected setSelection] = ReactuseState(false);
return (
<Flex flexDirection="column">
<Checkbox
isSelected=selected
onChange=setSelection>
Subscribe
</Checkbox>
<View>`You are `</View>
</Flex>
);
}
function Example() {
let [
selected
setSelection
] = ReactuseState(
false
);
return (
<Flex flexDirection="column">
<Checkbox
isSelected=
selected
onChange=
setSelection
>
Subscribe
</Checkbox>
<View>`You are `</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#
| Name | Type | Default | Description |
isEmphasized | boolean | — | This prop sets the emphasized style which provides visual prominence. |
isIndeterminate | boolean | — | Indeterminism is presentational only. The indeterminate visual representation remains regardless of user interaction. |
children | ReactNode | — | |
defaultSelected | boolean | — | |
isSelected | boolean | — | |
value | string | — | |
name | string | — | |
isDisabled | boolean | — | Whether the input is disabled. |
isReadOnly | boolean | — | Whether the input can be selected but not changed by the user. |
validationState | ValidationState | — | Whether the input should display its "valid" or "invalid" visual styling. |
isRequired | boolean | — | 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. |
autoFocus | boolean | — | Whether the element should receive focus on render |
UNSAFE_className | string | — | |
UNSAFE_style | CSSProperties | — |
Events
| Name | Type | Default | Description |
onChange | (
(isSelected: boolean
)) => void | — | |
onFocus | (
(e: FocusEvent
)) => void | — | Handler that is called when the element receives focus. |
onBlur | (
(e: FocusEvent
)) => void | — | Handler that is called when the element loses focus. |
onFocusChange | (
(isFocused: boolean
)) => void | — | Handler that is called when the element's focus status changes. |
onKeyDown | (
(e: KeyboardEvent
)) => void | — | Handler that is called when a key is pressed. |
onKeyUp | (
(e: KeyboardEvent
)) => void | — | Handler that is called when a key is released. |
Layout
| Name | Type | Default | Description |
flex | string | number | boolean | — | |
flexGrow | number | — | |
flexShrink | number | — | |
flexBasis | number | string | — | |
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' | — | |
flexOrder | number | — | |
gridArea | string | — | |
gridColumn | string | — | |
gridRow | string | — | |
gridColumnStart | string | — | |
gridColumnEnd | string | — | |
gridRowStart | string | — | |
gridRowEnd | string | — |
Spacing
| Name | Type | Default | Description |
margin | DimensionValue | — | |
marginTop | DimensionValue | — | |
marginLeft | DimensionValue | — | |
marginRight | DimensionValue | — | |
marginBottom | DimensionValue | — | |
marginStart | DimensionValue | — | |
marginEnd | DimensionValue | — | |
marginX | DimensionValue | — | |
marginY | DimensionValue | — |
Sizing
| Name | Type | Default | Description |
width | DimensionValue | — | |
minWidth | DimensionValue | — | |
maxWidth | DimensionValue | — | |
height | DimensionValue | — | |
minHeight | DimensionValue | — | |
maxHeight | DimensionValue | — |
Positioning
| Name | Type | Default | Description |
position | 'static'
| 'relative'
| 'absolute'
| 'fixed'
| 'sticky' | — | |
top | DimensionValue | — | |
bottom | DimensionValue | — | |
left | DimensionValue | — | |
right | DimensionValue | — | |
start | DimensionValue | — | |
end | DimensionValue | — | |
zIndex | number | — | |
isHidden | boolean | — |
Accessibility
| Name | Type | Default | Description |
id | string | — | |
tabIndex | number | — | |
aria-controls | string | — | Identifies the element (or elements) whose contents or presence are controlled by the current element. |
aria-label | string | — | Defines a string value that labels the current element. |
aria-labelledby | string | — | Identifies the element (or elements) that labels the current element. |
aria-describedby | string | — | Identifies the element (or elements) that describes the object. |
aria-details | string | — | Identifies the element (or elements) that provide a detailed, extended description for the object. |
aria-errormessage | string | — | Identifies the element that provides an error message for the object. |
Visual Options#
isDisabled#
<Checkbox isDisabled>Subscribe</Checkbox><Checkbox isDisabled>Subscribe</Checkbox><Checkbox isDisabled>
Subscribe
</Checkbox>isEmphasized#
<Checkbox isEmphasized defaultSelected>Subscribe</Checkbox><Checkbox isEmphasized defaultSelected>Subscribe</Checkbox><Checkbox
isEmphasized
defaultSelected>
Subscribe
</Checkbox>