From c7c7ef2af338dd906dc97193586584c5cbf787ac Mon Sep 17 00:00:00 2001 From: Josh Story Date: Tue, 21 May 2024 15:59:11 -0700 Subject: [PATCH] [Flight Reply] retain listeners when resolving models with existing listeners In #29201 a fix was made to ensure we don't "forget" about some listeners when handling cyclic chunks. In #29204 another fix was made for a special case when the chunk already has listeners before it first resolves. This implements the followup fix for Flight Reply which was originally missed in #29204 Co-Authored-by: Janka Uryga --- .../src/ReactFlightReplyServer.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/react-server/src/ReactFlightReplyServer.js b/packages/react-server/src/ReactFlightReplyServer.js index 62a9bf9eb85eb..b1e941f1e192f 100644 --- a/packages/react-server/src/ReactFlightReplyServer.js +++ b/packages/react-server/src/ReactFlightReplyServer.js @@ -205,8 +205,23 @@ function wakeChunkIfInitialized( case PENDING: case BLOCKED: case CYCLIC: - chunk.value = resolveListeners; - chunk.reason = rejectListeners; + if (chunk.value) { + for (let i = 0; i < resolveListeners.length; i++) { + chunk.value.push(resolveListeners[i]); + } + } else { + chunk.value = resolveListeners; + } + + if (chunk.reason) { + if (rejectListeners) { + for (let i = 0; i < rejectListeners.length; i++) { + chunk.reason.push(rejectListeners[i]); + } + } + } else { + chunk.reason = rejectListeners; + } break; case ERRORED: if (rejectListeners) {