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');