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.1 |
usage | import {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#
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] = ReactuseState('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#
Name | Type | Default | Description |
isEmphasized | boolean | — | By default, checkboxes are not emphasized (gray). This prop sets the emphasized style (blue) which provides visual prominence. |
isIndeterminate | boolean | — | Indeterminism is presentational, when a checkbox is indeterminate, it overrides the selection state. The indeterminate visual representation remains even after subsequent clicks . |
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 |
validationState |
| "valid" | 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: ) => void | — | Handler that is called when the element receives focus. |
onBlur | (e: ) => 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: ) => void | — | Handler that is called when a key is pressed. |
onKeyUp | (e: ) => 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 | — | |
slot | string | — |
Spacing
Name | Type | Default | Description |
margin |
| — | |
marginTop |
| — | |
marginLeft |
| — | |
marginRight |
| — | |
marginBottom |
| — | |
marginStart |
| — | |
marginEnd |
| — | |
marginX |
| — | |
marginY |
| — |
Sizing
Name | Type | Default | Description |
width |
| — | |
minWidth |
| — | |
maxWidth |
| — | |
height |
| — | |
minHeight |
| — | |
maxHeight |
| — |
Positioning
Name | Type | Default | Description |
position | 'static'
| 'relative'
| 'absolute'
| 'fixed'
| 'sticky' | — | |
top |
| — | |
bottom |
| — | |
left |
| — | |
right |
| — | |
start |
| — | |
end |
| — | |
zIndex | number | — | |
isHidden | boolean | — |
Accessibility
Name | Type | Default | Description |
role | string | — | |
id | string | — | |
tabIndex | number | — | |
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-controls | string | — | Identifies the element (or elements) whose contents or presence are controlled by the current element. |
aria-owns | string | — | 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-hidden | boolean | 'false' | 'true' | — | Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. |
Visual Options#
isDisabled#
<Checkbox isDisabled>Checkbox Label</Checkbox>
isEmphasized#
<Checkbox isEmphasized>Checkbox Label</Checkbox>