diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
index ee7f74fb73984..fcb15e0aa4633 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
@@ -468,6 +468,9 @@ describe('ReactDOMFizzServer', () => {
onError(x) {
loggedErrors.push(x);
},
+ getErrorHash() {
+ return 'Hash';
+ },
},
);
pipe(writable);
@@ -494,14 +497,16 @@ describe('ReactDOMFizzServer', () => {
// Now we can client render it instead.
expect(Scheduler).toFlushAndYield([]);
- if (__DEV__) {
- expectErrors(errors, [
+ expectErrors(
+ errors,
+ [
{
error: theError.message,
componentStack: componentStack(['Lazy', 'Suspense', 'div', 'App']),
},
- ]);
- }
+ ],
+ ['Hash'],
+ );
// The client rendered HTML is now in place.
expect(getVisibleChildren(container)).toEqual(
Hello
);
diff --git a/packages/react-reconciler/src/ReactFiberBeginWork.old.js b/packages/react-reconciler/src/ReactFiberBeginWork.old.js
index 583539dd08b52..0279e83b80cce 100644
--- a/packages/react-reconciler/src/ReactFiberBeginWork.old.js
+++ b/packages/react-reconciler/src/ReactFiberBeginWork.old.js
@@ -152,6 +152,7 @@ import {
shouldSetTextContent,
isSuspenseInstancePending,
isSuspenseInstanceFallback,
+ getSuspenseInstanceFallbackError,
registerSuspenseInstanceRetry,
supportsHydration,
isPrimaryRenderer,
@@ -2689,6 +2690,7 @@ function updateDehydratedSuspenseComponent(
// This boundary is in a permanent fallback state. In this case, we'll never
// get an update and we'll never be able to hydrate the final content. Let's just try the
// client side render instead.
+ const errorMsg = getSuspenseInstanceFallbackError(suspenseInstance);
return retrySuspenseComponentWithoutHydrating(
current,
workInProgress,
@@ -2696,11 +2698,14 @@ function updateDehydratedSuspenseComponent(
// TODO: The server should serialize the error message so we can log it
// here on the client. Or, in production, a hash/id that corresponds to
// the error.
- new Error(
- 'The server could not finish this Suspense boundary, likely ' +
- 'due to an error during server rendering. Switched to ' +
- 'client rendering.',
- ),
+ errorMsg
+ ? // eslint-disable-next-line react-internal/prod-error-codes
+ new Error(errorMsg)
+ : new Error(
+ 'The server could not finish this Suspense boundary, likely ' +
+ 'due to an error during server rendering. Switched to ' +
+ 'client rendering.',
+ ),
);
}