Skip to content

Commit 87f4824

Browse files
fix useFocusRing perf
1 parent 245a703 commit 87f4824

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

packages/@react-aria/focus/src/useFocusRing.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,15 @@ export function useFocusRing(props: AriaFocusRingProps = {}): FocusRingAria {
5151

5252
let onFocusChange = useCallback(isFocused => {
5353
state.current.isFocused = isFocused;
54+
state.current.isFocusVisible = isFocusVisible();
5455
setFocused(isFocused);
5556
updateState();
5657
}, [updateState]);
5758

5859
useFocusVisibleListener((isFocusVisible) => {
5960
state.current.isFocusVisible = isFocusVisible;
6061
updateState();
61-
}, [], {isTextInput});
62+
}, [isTextInput, isFocused], {enabled: isFocused, isTextInput});
6263

6364
let {focusProps} = useFocus({
6465
isDisabled: within,

packages/@react-aria/interactions/src/useFocusVisible.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,10 +333,13 @@ export function useFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResu
333333
/**
334334
* Listens for trigger change and reports if focus is visible (i.e., modality is not pointer).
335335
*/
336-
export function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyArray<any>, opts?: {isTextInput?: boolean}): void {
336+
export function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyArray<any>, opts?: {enabled?: boolean, isTextInput?: boolean}): void {
337337
setupGlobalFocusEvents();
338338

339339
useEffect(() => {
340+
if (opts?.enabled === false) {
341+
return;
342+
}
340343
let handler = (modality: Modality, e: HandlerEvent) => {
341344
// We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape
342345
if (!isKeyboardFocusEvent(!!(opts?.isTextInput), modality, e)) {
@@ -351,3 +354,4 @@ export function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyA
351354
// eslint-disable-next-line react-hooks/exhaustive-deps
352355
}, deps);
353356
}
357+

0 commit comments

Comments
 (0)