npm i @accessible/link
A component that adds aria attributes and keydown events to non-A elements in order to make them act like native links.
Check out the example on CodeSandbox
import {Link as AccessibleLink} from '@accessible/link'
const LinkButton = () => (
<AccessibleLink>
<button onClick={() => (window.location.href = '/foo')}>Go to /foo</button>
</AccessibleLink>
)
Adds role="link"
and tabIndex={0}
props to its child component unless those props are already
defined in the child component's props. Also adds a keydown
event for the Enter
key which
causes the component's onClick
property to fire.
Prop | Type | Default | Required? | Description |
---|---|---|---|---|
children | React.ReactElement |
undefined |
Yes | The component you want to add accessible roles and keydown events to. |
A React hook for adding a11y properties and link/role=link interop to elements.
const Link = () => {
const ref = React.useRef(null)
const a11yProps = useA11yButton(ref, (event) => {
// This is your `onClick` handler
navigate.to('/home')
event.preventDefault()
})
return <button {...a11yProps} ref={ref} />
}
Argument | Type | Required? | Description |
---|---|---|---|
target | React.RefObject<T> | T | null |
Yes | A React ref or HTML element |
children | React.ReactElement |
Yes | The component you want to turn into a button that handles focus and space , enter keydown events. |
{
readonly onClick: (event: React.MouseEvent<T, MouseEvent>) => void;
readonly role: "button";
readonly tabIndex: 0;
}
MIT