From 522f47345f79bb117f338384e75c8a79622bd735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Tue, 14 Jun 2022 20:16:42 -0400 Subject: [PATCH] Move the Error creation to be lazy (#24728) Creating an Error captures a stack trace which can be somewhat expensive. We shouldn't do tthat always for every render. This also ensures that the stack trace is more useful because you can follow through the Node.js code to see the cause. --- .../src/server/ReactDOMFizzServerNode.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/react-dom/src/server/ReactDOMFizzServerNode.js b/packages/react-dom/src/server/ReactDOMFizzServerNode.js index ce2b2e5030..4728a48a05 100644 --- a/packages/react-dom/src/server/ReactDOMFizzServerNode.js +++ b/packages/react-dom/src/server/ReactDOMFizzServerNode.js @@ -29,7 +29,8 @@ function createDrainHandler(destination, request) { } function createAbortHandler(request, reason) { - return () => abort(request, reason); + // eslint-disable-next-line react-internal/prod-error-codes + return () => abort(request, new Error(reason)); } type Options = {| @@ -49,7 +50,7 @@ type Options = {| type PipeableStream = {| // Cancel any pending I/O and put anything remaining into // client rendered mode. - abort(): void, + abort(reason: mixed): void, pipe(destination: T): T, |}; @@ -94,21 +95,16 @@ function renderToPipeableStream( 'error', createAbortHandler( request, - // eslint-disable-next-line react-internal/prod-error-codes - new Error('The destination stream errored while writing data.'), + 'The destination stream errored while writing data.', ), ); destination.on( 'close', - createAbortHandler( - request, - // eslint-disable-next-line react-internal/prod-error-codes - new Error('The destination stream closed early.'), - ), + createAbortHandler(request, 'The destination stream closed early.'), ); return destination; }, - abort(reason) { + abort(reason: mixed) { abort(request, reason); }, };