- Components
- Inputs
- Switch
Switch
Switches allow users to turn an individual option on or off.
default.tsx
Installation
Install the following dependencies:
npm install react-aria-components
Copy and paste the following code into your project.
switch.tsx
styles.ts
Update the import paths to match your project setup.
Usage
Use switch 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.
Options
Size
Use the size prop to control the size of the switch. The default variant is "md".
sizes.tsx
Label
A visual label can be provided using the component children or a hidden label using aria-label prop.
label.tsx
Disabled
Use the isDisabled prop to disable the switch.
disabled.tsx
Uncontrolled
The defaultValue prop can be used to set the default state.
uncontrolled.tsx
Controlled
Use the isSelected and onChange props to control the value of the input.
controlled.tsx
API Reference
Prop | Type | Default | Description |
---|---|---|---|
size | "sm" | "md" | "lg" | "md" | The size of the switch. |
inputRef | MutableRefObject<HTMLInputElement> | - | A ref for the HTML input element. |
defaultSelected | boolean | - | Whether the element should be selected (uncontrolled). |
isSelected | boolean | - | Whether the element should be selected (controlled). |
value | string | - | The value of the input element, used when submitting an HTML form. |
isDisabled | boolean | - | Whether the input is disabled. |
isReadOnly | boolean | - | Whether the input can be selected but not changed by the user. |
autoFocus | boolean | - | Whether the element should receive focus on render. |
name | string | - | The name of the input element, used when submitting an HTML |
children | ReactNode | (values: CheckboxRenderProps & {defaultChildren: ReactNode | undefined}) => ReactNode | - | The children of the component. A function may be provided to alter the children based on component state. |
Event | Type | Description |
---|---|---|
onChange | (isSelected: boolean) => void | Handler that is called when the Switch's selection state changes. |
onFocus | (e: FocusEvent<Target>) => void | Handler that is called when the Switch receives focus. |
onBlur | (e: FocusEvent<Target>) => void | Handler that is called when the Switch loses focus. |
onFocusChange | (isFocused: boolean) => void | Handler that is called when the Switch'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. |
onHoverStart | (e: HoverEvent) => void | Handler that is called when a hover interaction starts. |
onHoverEnd | (e: HoverEvent) => void | Handler that is called when a hover interaction ends. |
onHoverChange | (isHovering: boolean) => void | Handler that is called when the hover state changes. |
Data attribute | Description |
---|---|
[data-selected] | Whether the switch is selected. |
[data-hovered] | Whether the switch is currently hovered with a mouse. |
[data-pressed] | Whether the switch is currently in a pressed state. |
[data-focused] | Whether the switch is focused, either via a mouse or keyboard. |
[data-focus-visible] | Whether the switch is keyboard focused. |
[data-disabled] | Whether the switch is disabled. |
[data-readonly] | Whether the switch is read only. |
Accessibility
Keyboard interactions
Key | Description |
---|---|
Space Enter | Toggles the component's state. |