@samitouri / QOS-React-2 / commits / e04f4259c4

Handle SuspenseListComponent getting retried (#16745)

This happens for example when a deleted boundary transfers its pending promises to the list so that the list can be retried. This wasn't caught by unit tests because this flag wasn't on in those tests.

Sebastian Markbåge committed Sep 10, 2019 at 19:38 UTC e04f4259c4c2063038c47e0364f4d7ac71236bc0
2 files changed +5
packages/react-reconciler/src/ReactFiberWorkLoop.js
+4
@@ -77,6 +77,7 @@ import {
77 HostRoot,
78 ClassComponent,
79 SuspenseComponent,
80 + SuspenseListComponent,
81 FunctionComponent,
82 ForwardRef,
83 MemoComponent,
@@ -2223,6 +2224,9 @@ export function resolveRetryThenable(boundaryFiber: Fiber, thenable: Thenable) {
2224 retryTime = suspenseState.retryTime;
2225 }
2226 break;
2227 + case SuspenseListComponent:
2228 + retryCache = boundaryFiber.stateNode;
2229 + break;
2230 default:
2231 invariant(
2232 false,
packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js
+1
@@ -11,6 +11,7 @@ describe('ReactSuspenseList', () => {
11 ReactFeatureFlags = require('shared/ReactFeatureFlags');
12 ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
13 ReactFeatureFlags.replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
14 + ReactFeatureFlags.enableSuspenseServerRenderer = true;
15 React = require('react');
16 ReactNoop = require('react-noop-renderer');
17 Scheduler = require('scheduler');