diff --git a/packages/react-reconciler/src/ReactFiberBeginWork.js b/packages/react-reconciler/src/ReactFiberBeginWork.js index 080f3a1fa8361..1c82d044c442d 100644 --- a/packages/react-reconciler/src/ReactFiberBeginWork.js +++ b/packages/react-reconciler/src/ReactFiberBeginWork.js @@ -1244,7 +1244,7 @@ function updateSuspenseComponent( } else { // The current tree has not already timed out. That means the primary // children are not wrapped in a fragment fiber. - const currentPrimaryChild: Fiber = (current.child: any); + const currentPrimaryChild: Fiber | null = (current.child: any); if (nextDidTimeout) { // Timed out. Wrap the children in a fragment fiber to keep them // separate from the fallback children. @@ -1260,7 +1260,6 @@ function updateSuspenseComponent( primaryChildFragment.effectTag |= Placement; primaryChildFragment.child = currentPrimaryChild; - currentPrimaryChild.return = primaryChildFragment; if ((workInProgress.mode & ConcurrentMode) === NoContext) { // Outside of concurrent mode, we commit the effects from the diff --git a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js index 1d987f70fd020..76968cb557b9b 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js @@ -838,5 +838,43 @@ describe('ReactSuspense', () => { ]); expect(root).toMatchRenderedOutput('Tab: 2 + sibling'); }); + + it('#14162', () => { + const {lazy} = React; + + function Hello() { + return hello; + } + + async function fetchComponent() { + return new Promise(r => { + // simulating a delayed import() call + setTimeout(r, 1000, {default: Hello}); + }); + } + + const LazyHello = lazy(fetchComponent); + + class App extends React.Component { + state = {render: false}; + + componentDidMount() { + setTimeout(() => this.setState({render: true})); + } + + render() { + return ( + loading...}> + {this.state.render && } + + ); + } + } + + const root = ReactTestRenderer.create(null); + + root.update(); + jest.advanceTimersByTime(1000); + }); }); });