React › Accessibility (a11y) in React
How do you make a custom React component keyboard accessible?
IntermediateAnswer
A custom component built from a div or span does not get keyboard behavior automatically the way a real button does. To fix this you add tabIndex so it can be focused, and an onKeyDown handler so pressing Enter or Space triggers the same action as a click.
function CustomButton({ onClick, children }) {
return (
<div
role="button"
tabIndex={0}
onClick={onClick}
onKeyDown={(e) => {
if (e.key === 'Enter' || e.key === ' ') onClick();
}}
>
{children}
</div>
);
}Real-world example A design team builds a custom styled button using a div for a unique look, and adds keyboard support so users who cannot use a mouse can still activate it with the Enter key.