From ca0941fce3a03592530f6111f77cbc9c0daf79af Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Mon, 23 Jul 2018 17:47:40 -0700 Subject: [PATCH] Add regression test for Placeholder fallbacks with lifecycle methods (#13254) Found by @rhagigi Co-authored-by: Royi Hagigi Co-authored-by: Andrew Clark --- .../__tests__/ReactSuspense-test.internal.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) 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 () => {