From 6e882eb731e8b3135079c702f1cb91c85d0d0720 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Fri, 6 Mar 2026 11:48:57 -0500 Subject: [PATCH 01/15] =?UTF-8?q?Revert=20"perf(useRefObjectAsForwardedRef?= =?UTF-8?q?):=20add=20dependency=20array=20to=20useImperati=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6225ba231cfdbe6ef7fa41dd62734d5a970bdc7d. --- packages/react/src/hooks/useRefObjectAsForwardedRef.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/react/src/hooks/useRefObjectAsForwardedRef.ts b/packages/react/src/hooks/useRefObjectAsForwardedRef.ts index 2d1fb01f0a7..11becf147d7 100644 --- a/packages/react/src/hooks/useRefObjectAsForwardedRef.ts +++ b/packages/react/src/hooks/useRefObjectAsForwardedRef.ts @@ -9,7 +9,5 @@ import {useImperativeHandle} from 'react' * **NOTE**: The `refObject` should be passed to the underlying element, NOT the `forwardedRef`. */ export function useRefObjectAsForwardedRef(forwardedRef: ForwardedRef, refObject: RefObject): void { - // The ref object is stable (from useRef), so this factory only needs to run once. - // Without the dependency array, useImperativeHandle re-runs the factory every render. - useImperativeHandle(forwardedRef, () => refObject.current, [refObject]) + useImperativeHandle(forwardedRef, () => refObject.current) } From 288dee92b49169d3280ce4a50318963acb9c6de2 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Fri, 6 Mar 2026 18:21:48 +0000 Subject: [PATCH 02/15] Add unit tests --- .../useRefObjectAsForwardedRef.test.tsx | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 packages/react/src/hooks/__tests__/useRefObjectAsForwardedRef.test.tsx diff --git a/packages/react/src/hooks/__tests__/useRefObjectAsForwardedRef.test.tsx b/packages/react/src/hooks/__tests__/useRefObjectAsForwardedRef.test.tsx new file mode 100644 index 00000000000..9a6e72538ad --- /dev/null +++ b/packages/react/src/hooks/__tests__/useRefObjectAsForwardedRef.test.tsx @@ -0,0 +1,103 @@ +import {render} from '@testing-library/react' +import React, {forwardRef, type RefObject} from 'react' +import {describe, expect, it, vi} from 'vitest' +import {useRefObjectAsForwardedRef} from '../useRefObjectAsForwardedRef' + +type InputOrButtonRef = RefObject + +const Component = forwardRef(({asButton}, forwardedRef) => { + const ref: InputOrButtonRef = React.useRef(null) + + useRefObjectAsForwardedRef(forwardedRef, ref) + + return asButton ?