useRovingFocus
The useRovingFocus
hook applies a roving tab index to the children matching
the given selector and enables you to navigate the elements using the arrow
keys. Applying a roving tab index to a list of items enables you to efficiently
navigate through the app, having a single tab-stop for a collection of items.
Navigating back to the collection restores the focus to the item that has been
focused when navigating away, enabling you to return to where you left off.
Import
import { useRovingFocus } from '@dynatrace/strato-components-preview/core';
Use cases
Set the roving direction
Using the direction
option of the useRovingFocus
hook, you can have the
collection navigable by either up
/down
, left
/right
, or all four arrow
keys.
Select specific children
By default, the useRovingFocus
hook selects all direct descendants and applies
the roving tab index to them. You can override the selector used for querying
the children to exclude e.g. separators.
Caveats
The roving focus currently has some limitations that you should consider when using it.
Querying children
The useRovingFocus
hook currently queries the children of the given container
using querySelectorAll
and the provided selector. You can query any children
of the container, whether they're interactive or not. The roving tab index will
be added to all children matching the selector.
Currently, the hook doesn't deal well with dynamic children. As long as the settings or the amount of rendered child nodes don't change, it won't re-query the children. Hence, the roving focus will only apply to the children rendered when the hook was initialized.
Nested containers / roving focus groups
It is not yet possible to properly nest roving focus containers or create groups of items inside a container via a configuration object.
Virtualization
It is not yet possible to virtualize the items inside the roving focus container.