Radio
Accessible Radio component that follows the WAI-ARIA Radio Button/Group Pattern.
#Installation
npm install reakit
Learn more in Get started.
#Usage
import { useRadioState, Radio, RadioGroup } from "reakit/Radio";
function Example() {
const radio = useRadioState();
return (
<RadioGroup {...radio} aria-label="fruits">
<label>
<Radio {...radio} value="apple" /> apple
</label>
<label>
<Radio {...radio} value="orange" /> orange
</label>
<label>
<Radio {...radio} value="watermelon" /> watermelon
</label>
</RadioGroup>
);
}
#Default value
To set a default value, you can pass the value of the current checked radio to the state property on useRadioState.
import { useRadioState, Radio, RadioGroup } from "reakit/Radio";
function Example() {
const radio = useRadioState({ state: "orange" });
return (
<RadioGroup {...radio} aria-label="fruits">
<label>
<Radio {...radio} value="apple" /> apple
</label>
<label>
<Radio {...radio} value="orange" /> orange
</label>
<label>
<Radio {...radio} value="watermelon" /> watermelon
</label>
</RadioGroup>
);
}
#Accessibility
Radiohas roleradio.Radiohasaria-checkedset totruewhen it's checked. Otherwise,aria-checkedis set tofalse.Radioextends the accessibility features of CompositeItem, which means it uses the roving tabindex method to manage focus.
Learn more in Accessibility.
#Composition
Radiouses CompositeItem, and is used by FormRadio and MenuItemRadio.RadioGroupuses Composite.
Learn more in Composition.
#Props
#useRadioState
-
baseIdstringID that will serve as a base for all the items IDs.
-
unstable_virtualbooleanIf enabled, the composite element will act as an aria-activedescendant container instead of roving tabindex. DOM focus will remain on the composite while its items receive virtual focus.
-
rtlbooleanDetermines how
nextandpreviousfunctions will behave. Ifrtlis set totrue, they will be inverted. This only affects the composite widget behavior. You still need to setdir="rtl"on HTML/CSS. -
orientation"horizontal" | "vertical" | undefinedDefines the orientation of the composite widget. If the composite has a single row or column (one-dimensional), the
orientationvalue determines which arrow keys can be used to move focus:undefined: all arrow keys work.horizontal: only left and right arrow keys work.vertical: only up and down arrow keys work.
It doesn't have any effect on two-dimensional composites.
-
currentIdstring | null | undefinedThe current focused item
id.undefinedwill automatically focus the first enabled composite item.nullwill focus the base composite element and users will be able to navigate out of it using arrow keys.- If
currentIdis initially set tonull, the base composite element itself will have focus and users will be able to navigate to it using arrow keys.
-
loopboolean | "horizontal" | "vertical"On one-dimensional composites:
trueloops from the last item to the first item and vice-versa.horizontalloops only iforientationishorizontalor not set.verticalloops only iforientationisverticalor not set.- If
currentIdis initially set tonull, the composite element will be focused in between the last and first items.
On two-dimensional composites:
trueloops from the last row/column item to the first item in the same row/column and vice-versa. If it's the last item in the last row, it moves to the first item in the first row and vice-versa.horizontalloops only from the last row item to the first item in the same row.verticalloops only from the last column item to the first item in the column row.- If
currentIdis initially set tonull, vertical loop will have no effect as moving down from the last row or up from the first row will focus the composite element. - If
wrapmatches the value ofloop, it'll wrap between the last item in the last row or column and the first item in the first row or column and vice-versa.
-
wrapboolean | "horizontal" | "vertical"Has effect only on two-dimensional composites. If enabled, moving to the next item from the last one in a row or column will focus the first item in the next row or column and vice-versa.
truewraps between rows and columns.horizontalwraps only between rows.verticalwraps only between columns.- If
loopmatches the value ofwrap, it'll wrap between the last item in the last row or column and the first item in the first row or column and vice-versa.
-
shiftbooleanHas effect only on two-dimensional composites. If enabled, moving up or down when there's no next item or the next item is disabled will shift to the item right before it.
-
statestring | number | undefinedThe
valueattribute of the current checked radio.
#Radio
-
disabledboolean | undefinedSame as the HTML attribute.
-
focusableboolean | undefinedWhen an element is
disabled, it may still befocusable. It works similarly toreadOnlyon form elements. In this case, onlyaria-disabledwill be set. -
idstring | undefinedSame as the HTML attribute.
-
valuestring | numberSame as the
valueattribute. -
checkedboolean | undefinedSame as the
checkedattribute.
17 state props
These props are returned by the state hook. You can spread them into this component (
{...state}) or pass them separately. You can also provide these props from your own state logic.
-
baseIdstringID that will serve as a base for all the items IDs.
-
unstable_virtualbooleanIf enabled, the composite element will act as an aria-activedescendant container instead of roving tabindex. DOM focus will remain on the composite while its items receive virtual focus.
-
orientation"horizontal" | "vertical" | undefinedDefines the orientation of the composite widget. If the composite has a single row or column (one-dimensional), the
orientationvalue determines which arrow keys can be used to move focus:undefined: all arrow keys work.horizontal: only left and right arrow keys work.vertical: only up and down arrow keys work.
It doesn't have any effect on two-dimensional composites.
-
unstable_movesnumberStores the number of moves that have been performed by calling
move,next,previous,up,down,firstorlast. -
currentIdstring | null | undefinedThe current focused item
id.undefinedwill automatically focus the first enabled composite item.nullwill focus the base composite element and users will be able to navigate out of it using arrow keys.- If
currentIdis initially set tonull, the base composite element itself will have focus and users will be able to navigate to it using arrow keys.
-
itemsItem[]Lists all the composite items with their
id, DOMref,disabledstate andgroupIdif any. This state is automatically updated whenregisterItemandunregisterItemare called. -
registerItem(item: Item) => voidRegisters a composite item.
-
unregisterItem(id: string) => voidUnregisters a composite item.
-
setCurrentId(value: SetStateAction<string | null | undefine...Sets
currentId. This is different fromcomposite.moveas this only updates thecurrentIdstate without moving focus. When the composite widget gets focused by the user, the item referred by thecurrentIdstate will get focus. -
next(unstable_allTheWay?: boolean | undefined) => voidMoves focus to the next item.
-
previous(unstable_allTheWay?: boolean | undefined) => voidMoves focus to the previous item.
-
up(unstable_allTheWay?: boolean | undefined) => voidMoves focus to the item above.
-
down(unstable_allTheWay?: boolean | undefined) => voidMoves focus to the item below.
-
first() => voidMoves focus to the first item.
-
last() => voidMoves focus to the last item.
-
statestring | number | undefinedThe
valueattribute of the current checked radio. -
setState(value: SetStateAction<string | number | undefi...Sets
state.
#RadioGroup
-
disabledboolean | undefinedSame as the HTML attribute.
-
focusableboolean | undefinedWhen an element is
disabled, it may still befocusable. It works similarly toreadOnlyon form elements. In this case, onlyaria-disabledwill be set.
12 state props
These props are returned by the state hook. You can spread them into this component (
{...state}) or pass them separately. You can also provide these props from your own state logic.
-
baseIdstringID that will serve as a base for all the items IDs.
-
unstable_virtualbooleanIf enabled, the composite element will act as an aria-activedescendant container instead of roving tabindex. DOM focus will remain on the composite while its items receive virtual focus.
-
orientation"horizontal" | "vertical" | undefinedDefines the orientation of the composite widget. If the composite has a single row or column (one-dimensional), the
orientationvalue determines which arrow keys can be used to move focus:undefined: all arrow keys work.horizontal: only left and right arrow keys work.vertical: only up and down arrow keys work.
It doesn't have any effect on two-dimensional composites.
-
currentIdstring | null | undefinedThe current focused item
id.undefinedwill automatically focus the first enabled composite item.nullwill focus the base composite element and users will be able to navigate out of it using arrow keys.- If
currentIdis initially set tonull, the base composite element itself will have focus and users will be able to navigate to it using arrow keys.
-
wrapboolean | "horizontal" | "vertical"Has effect only on two-dimensional composites. If enabled, moving to the next item from the last one in a row or column will focus the first item in the next row or column and vice-versa.
truewraps between rows and columns.horizontalwraps only between rows.verticalwraps only between columns.- If
loopmatches the value ofwrap, it'll wrap between the last item in the last row or column and the first item in the first row or column and vice-versa.
-
unstable_movesnumberStores the number of moves that have been performed by calling
move,next,previous,up,down,firstorlast. -
groupsGroup[]Lists all the composite groups with their
idand DOMref. This state is automatically updated whenregisterGroupandunregisterGroupare called. -
itemsItem[]Lists all the composite items with their
id, DOMref,disabledstate andgroupIdif any. This state is automatically updated whenregisterItemandunregisterItemare called. -
setCurrentId(value: SetStateAction<string | null | undefine...Sets
currentId. This is different fromcomposite.moveas this only updates thecurrentIdstate without moving focus. When the composite widget gets focused by the user, the item referred by thecurrentIdstate will get focus. -
first() => voidMoves focus to the first item.
-
last() => voidMoves focus to the last item.
-
move(id: string | null) => voidMoves focus to a given item ID.