From 15fefa1ad927c1453113a8ef776d3081faf5f5f0 Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Thu, 21 Mar 2024 09:14:27 +0100 Subject: [PATCH] Revert "[Flight] Serialize deduped elements by direct reference even if they suspend (#28283)" This reverts commit ba5e6a8329c7194a2c573c037a37f24ce45ee58f. --- packages/react-server/src/ReactFlightServer.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js index d253db44c4a15..a7404833986c0 100644 --- a/packages/react-server/src/ReactFlightServer.js +++ b/packages/react-server/src/ReactFlightServer.js @@ -1334,16 +1334,12 @@ function renderModelDestructive( // but that is able to reuse the same task if we're already in one but then that // will be a lazy future value rather than guaranteed to exist but maybe that's good. const newId = outlineModel(request, (value: any)); - return serializeByValueID(newId); + return serializeLazyID(newId); } else { // We've already emitted this as an outlined object, so we can refer to that by its - // existing ID. TODO: We should use a lazy reference since, unlike plain objects, - // elements might suspend so it might not have emitted yet even if we have the ID for - // it. However, this creates an extra wrapper when it's not needed. We should really - // detect whether this already was emitted and synchronously available. In that - // case we can refer to it synchronously and only make it lazy otherwise. - // We currently don't have a data structure that lets us see that though. - return serializeByValueID(existingId); + // existing ID. We use a lazy reference since, unlike plain objects, elements might + // suspend so it might not have emitted yet even if we have the ID for it. + return serializeLazyID(existingId); } } else { // This is the first time we've seen this object. We may never see it again