From 9672f260c39ec4125b8afe2f5e2c14e6dce6cb26 Mon Sep 17 00:00:00 2001 From: Marco Salazar Date: Tue, 29 Mar 2022 17:36:26 -0400 Subject: [PATCH] replace-fork --- .../src/__tests__/ReactDOMFizzServer-test.js | 13 +++++++++---- .../src/ReactFiberBeginWork.old.js | 15 ++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) 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.', + ), ); }