diff --git a/packages/react-aria/src/utils/useId.ts b/packages/react-aria/src/utils/useId.ts index 693f3ba901e..daf8886540a 100644 --- a/packages/react-aria/src/utils/useId.ts +++ b/packages/react-aria/src/utils/useId.ts @@ -43,9 +43,14 @@ export function useId(defaultId?: string): string { let res = useSSRSafeId(value); let cleanupRef = useRef(null); + let registeredId = useRef(null); - if (registry) { + if (registry && registeredId.current !== res) { + if (registeredId.current !== null) { + registry.unregister(cleanupRef); + } registry.register(cleanupRef, res); + registeredId.current = res; } if (canUseDOM) { @@ -65,6 +70,7 @@ export function useId(defaultId?: string): string { if (registry) { registry.unregister(cleanupRef); } + registeredId.current = null; idsUpdaterMap.delete(r); }; }, [res]);