![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
react-roving-tabindex
Advanced tools
React Hooks implementation of a roving tabindex. See the storybook here to try it out.
The roving tabindex is a useful accessibility refinement for a grouped set of inputs, such as a buttons toolbar. It is a mechanism for controlling tabbing within that group, such that:
The left and right arrow keys are used to select inputs within the group. More information is available here and here.
There are two main architectural choices:
This particular implementation of a roving tabindex opts to support dynamic enabling and unenabling, and allows inputs to be nested in subcomponents and wrapper elements. The former behaviour is implemented by inputs dynamically registering and unregistering themselves as appropriate, and the latter behaviour is implemented using the React Context API to allow communication between the managing group component and the nested inputs, however deeply located they are in the group's component subtree.
This package has been written using the React Hooks API, so it is only usable with React version 16.8 or greater.
npm install --save react-roving-tabindex
This package includes TypeScript typings.
There is a storybook for this package here.
import React from "react";
import {
RovingTabIndexProvider,
useRovingTabIndex,
useFocusEffect
} from "react-roving-tabindex";
type Props = {
disabled?: boolean;
children: React.ReactNode;
};
const ToolbarButton = ({ disabled = false, children }: Props) => {
const ref = React.useRef<HTMLButtonElement>(null);
// handleKeyDown and handleClick are stable for the lifetime of the component:
const [tabIndex, focused, handleKeyDown, handleClick] = useRovingTabIndex(
ref, // don't change the value of this ref
disabled // change this as you like throughout the lifetime of the component
);
// Use some mechanism to set focus on the button if it gets focused,
// in this case using the included useFocusEffect hook:
useFocusEffect(focused, ref);
return (
<button
ref={ref}
tabIndex={tabIndex} // must be applied here
disabled={disabled}
onKeyDown={handleKeyDown}
onClick={handleClick}
>
{children}
</button>
);
};
const App = () => (
<RovingTabIndexProvider>
{/*
it's fine for the roving tabindex components to be nested
in other DOM or React components
*/}
<ToolbarButton>First Button</ToolbarButton>
<ToolbarButton>Second Button</ToolbarButton>
</RovingTabIndexProvider>
);
You can optionally pass a custom ID to the useRovingTabIndex
hook as the third argument:
const [tabIndex, focused, handleKeyDown, handleClick] = useRovingTabIndex(
ref, // don't change the value of this ref
disabled, // change this as you like
"custom-id-1" // some custom id
);
The value initially passed with be used for the lifetime of the containing component.
MIT © stevejay
FAQs
React implementation of a roving tabindex, now with grid support
The npm package react-roving-tabindex receives a total of 12,738 weekly downloads. As such, react-roving-tabindex popularity was classified as popular.
We found that react-roving-tabindex demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.