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. |
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. |
validationState | ValidationState | — | Whether the input should display its "valid" or "invalid" visual styling. |
isReadOnly | boolean | — | Whether the input can be selected but not changed by the user. |
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>