diff --git a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js index 5c6408c7c822c..0af4d7bb70e3f 100644 --- a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js +++ b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js @@ -1659,16 +1659,17 @@ function recursivelyGetFragmentInstanceChildren( return; } + if (child.tag === HostComponent) { + childElements.add(child.stateNode); + } + if (child.sibling !== null) { recursivelyGetFragmentInstanceChildren(child.sibling, childElements); } - if (child.tag === HostComponent) { - childElements.add(child.stateNode); - return; + if (child.tag !== HostComponent) { + recursivelyGetFragmentInstanceChildren(child.child, childElements); } - - recursivelyGetFragmentInstanceChildren(child.child, childElements); } function normalizeListenerOptions( diff --git a/packages/react-dom/src/__tests__/ReactDOMFragmentRefs-test.js b/packages/react-dom/src/__tests__/ReactDOMFragmentRefs-test.js index 1550dd2d3d1cd..2c740203c1d83 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFragmentRefs-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFragmentRefs-test.js @@ -96,13 +96,13 @@ describe('FragmentRefs', () => { const parentRef = React.createRef(); const fragmentRef = React.createRef(); const root = ReactDOMClient.createRoot(container); - let focusedElement = null; function Test() { return (
+ B @@ -118,24 +118,10 @@ describe('FragmentRefs', () => { root.render(); }); - // The test environment doesn't implement focus. - // Mock it here, along with a naive focusable query so we can assert - // that the first _focusable_ element is found. - const focusableChildren = parentRef.current.querySelectorAll( - 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])', - ); - const focusMock = jest.spyOn(HTMLElement.prototype, 'focus'); - focusMock.mockImplementation(function () { - if (Array.from(focusableChildren).includes(this)) { - focusedElement = this.id; - } else { - return false; - } - }); await act(() => { fragmentRef.current.focus(); }); - expect(focusedElement).toEqual('child-b'); + expect(document.activeElement.id).toEqual('child-b'); }); // @gate enableFragmentRefs