Switch
Switches allow users to turn an individual option on or off. They are usually used to activate or deactivate a specific setting.
install | yarn add @react-spectrum/switch |
---|---|
version | 3.0.0-rc.2 |
usage | import {Switch} from '@react-spectrum/switch' |
Example#
<Switch>Switch it up</Switch>
Content#
Switches accept children, which are rendered as the label.
Switches are best used for communicating activation (e.g., on/off states), while checkboxes are best used for communicating selection (e.g. multiple table rows). Switches, unlike checkboxes, can't have an error state.
Accessibility#
In certain cases a visible label isn't needed. For example, a Switch located at the top of a panel which toggles the panels options on or off.
If a visible label isn't specified, an aria-label
must be provided to the Switch 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.
<Switch aria-label="Activate Setting" />
Internationalization#
To internationalize a Switch, 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 switch is flipped.
Value#
Switches 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.
<Switch defaultSelected>Uncontrolled</Switch>
<Switch isSelected>Controlled</Switch>
Events#
Switches accept a user defined onChange
prop, triggered whenever the Switch is pressed.
The example below uses onChange
to alert the user to changes in state.
function Example() {
let [selected setSelection] = ReactuseState('false');
let toggle = (value) => {
value ? setSelection('true') : setSelection('false');
}
return (
<div>
<div> The Switch is on: selected </div>
<Switch onChange= toggle>
Switch Label
</Switch>
</div>
);
}
Props#
Name | Type | Default | Description |
isEmphasized | boolean | "false" | This prop sets the emphasized style which provides visual prominence. |
UNSAFE_className | string | — | |
UNSAFE_style | CSSProperties | — |
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 |
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#
<Switch isDisabled>Switch Label</Switch>
isEmphasized#
<Switch isEmphasized>Switch Label</Switch>
isReadOnly#
<Switch isReadOnly isSelected>Switch Label</Switch>