diff --git a/packages/react-reconciler/src/ReactFiberBeginWork.js b/packages/react-reconciler/src/ReactFiberBeginWork.js index 902e424c3505bb..73b723bf65458a 100644 --- a/packages/react-reconciler/src/ReactFiberBeginWork.js +++ b/packages/react-reconciler/src/ReactFiberBeginWork.js @@ -1242,7 +1242,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 = current.child; if (nextDidTimeout) { // Timed out. Wrap the children in a fragment fiber to keep them // separate from the fallback children. @@ -1256,7 +1256,6 @@ function updateSuspenseComponent( null, ); primaryChildFragment.child = currentPrimaryChild; - currentPrimaryChild.return = primaryChildFragment; // Even though we're creating a new fiber, there are no new children, // because we're reusing an already mounted tree. So we don't need to diff --git a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js index 8647b2a5d5c61a..5b4e111c169d0c 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js @@ -883,7 +883,44 @@ describe('ReactSuspense', () => { root.update(null); expect(root).toFlushWithoutYielding(); + jest.advanceTimersByTime(1000); + }); + + 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); }); });