diff --git a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js index 14678d160e..c95e050cfe 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js @@ -1314,6 +1314,37 @@ describe('ReactSuspense', () => { expect(ReactNoop.getChildren()).toEqual([span('Loading...')]); }); + + it('does not infinite loop if fallback contains lifecycle method', async () => { + class Fallback extends React.Component { + state = { + name: 'foo', + }; + componentDidMount() { + this.setState({ + name: 'bar', + }); + } + render() { + return ; + } + } + + class Demo extends React.Component { + render() { + return ( + }> + + + ); + } + } + + ReactNoop.renderLegacySyncRoot(); + expect(ReactNoop.getChildren()).toEqual([span('Loading...')]); + await advanceTimers(100); + expect(ReactNoop.getChildren()).toEqual([span('Hi')]); + }); }); it('does not call lifecycles of a suspended component', async () => {