Skip to content

Commit f75bdfd

Browse files
committed
Hide/unhide the content of dehydrated suspense boundaries if they resuspend (#32900)
Found this bug while working on Activity. There's a weird edge case when a dehydrated Suspense boundary is a direct child of another Suspense boundary which is hydrated but then it resuspends without forcing the inner one to hydrate/delete. It used to just leave that in place because hiding/unhiding didn't deal with dehydrated fragments. Not sure this is really worth fixing. DiffTrain build for [ebf7318](ebf7318)
1 parent 6c77e92 commit f75bdfd

23 files changed

+1166
-766
lines changed

compiled-rn/VERSION_NATIVE_FB

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
19.2.0-native-fb-b04254fd-20250415
1+
19.2.0-native-fb-ebf7318e-20250422

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-dev.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<fd12866fb2da2348897605e7db4ee211>>
10+
* @generated SignedSource<<f016df1eb6a478012d80365da91fa0e3>>
1111
*/
1212

1313
"use strict";
@@ -404,5 +404,5 @@ __DEV__ &&
404404
exports.useFormStatus = function () {
405405
return resolveDispatcher().useHostTransitionStatus();
406406
};
407-
exports.version = "19.2.0-native-fb-b04254fd-20250415";
407+
exports.version = "19.2.0-native-fb-ebf7318e-20250422";
408408
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-prod.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<0cee692fd0e4e197fb462a88b80f6799>>
10+
* @generated SignedSource<<7062b5550796a072c5b99b383e56e4ff>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-b04254fd-20250415";
206+
exports.version = "19.2.0-native-fb-ebf7318e-20250422";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-profiling.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<0cee692fd0e4e197fb462a88b80f6799>>
10+
* @generated SignedSource<<7062b5550796a072c5b99b383e56e4ff>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-b04254fd-20250415";
206+
exports.version = "19.2.0-native-fb-ebf7318e-20250422";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-dev.js

Lines changed: 303 additions & 238 deletions
Large diffs are not rendered by default.

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-prod.js

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<6bd4e8ce8017671956165315afaa7ceb>>
10+
* @generated SignedSource<<27c6fd481162e9971cf8888fbd80f7bf>>
1111
*/
1212

1313
/*
@@ -10039,6 +10039,18 @@ function commitMutationEffectsOnFiber(finishedWork, root) {
1003910039
captureCommitPhaseError(retryQueue, retryQueue.return, error);
1004010040
}
1004110041
}
10042+
} else if (18 === root.tag) {
10043+
if (null === current) {
10044+
retryQueue = root;
10045+
try {
10046+
var instance = retryQueue.stateNode;
10047+
suspenseCallback
10048+
? hideOrUnhideSuspenseBoundary(instance, !0)
10049+
: hideOrUnhideSuspenseBoundary(retryQueue.stateNode, !1);
10050+
} catch (error) {
10051+
captureCommitPhaseError(retryQueue, retryQueue.return, error);
10052+
}
10053+
}
1004210054
} else if (
1004310055
((22 !== root.tag && 23 !== root.tag) ||
1004410056
null === root.memoizedState ||
@@ -14329,6 +14341,30 @@ function clearSuspenseBoundary(parentInstance, suspenseInstance) {
1432914341
} while (node);
1433014342
retryIfBlockedOn(suspenseInstance);
1433114343
}
14344+
function hideOrUnhideSuspenseBoundary(suspenseInstance, isHidden) {
14345+
var node = suspenseInstance;
14346+
suspenseInstance = 0;
14347+
do {
14348+
var nextNode = node.nextSibling;
14349+
1 === node.nodeType
14350+
? isHidden
14351+
? ((node._stashedDisplay = node.style.display),
14352+
(node.style.display = "none"))
14353+
: ((node.style.display = node._stashedDisplay || ""),
14354+
"" === node.getAttribute("style") && node.removeAttribute("style"))
14355+
: 3 === node.nodeType &&
14356+
(isHidden
14357+
? ((node._stashedText = node.nodeValue), (node.nodeValue = ""))
14358+
: (node.nodeValue = node._stashedText || ""));
14359+
if (nextNode && 8 === nextNode.nodeType)
14360+
if (((node = nextNode.data), "/$" === node))
14361+
if (0 === suspenseInstance) break;
14362+
else suspenseInstance--;
14363+
else
14364+
("$" !== node && "$?" !== node && "$!" !== node) || suspenseInstance++;
14365+
node = nextNode;
14366+
} while (node);
14367+
}
1433214368
function clearContainerSparingly(container) {
1433314369
var nextNode = container.firstChild;
1433414370
nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);
@@ -16032,14 +16068,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1603216068
};
1603316069
var isomorphicReactPackageVersion$jscomp$inline_1805 = React.version;
1603416070
if (
16035-
"19.2.0-native-fb-b04254fd-20250415" !==
16071+
"19.2.0-native-fb-ebf7318e-20250422" !==
1603616072
isomorphicReactPackageVersion$jscomp$inline_1805
1603716073
)
1603816074
throw Error(
1603916075
formatProdErrorMessage(
1604016076
527,
1604116077
isomorphicReactPackageVersion$jscomp$inline_1805,
16042-
"19.2.0-native-fb-b04254fd-20250415"
16078+
"19.2.0-native-fb-ebf7318e-20250422"
1604316079
)
1604416080
);
1604516081
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -16059,24 +16095,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1605916095
null === componentOrElement ? null : componentOrElement.stateNode;
1606016096
return componentOrElement;
1606116097
};
16062-
var internals$jscomp$inline_2261 = {
16098+
var internals$jscomp$inline_2267 = {
1606316099
bundleType: 0,
16064-
version: "19.2.0-native-fb-b04254fd-20250415",
16100+
version: "19.2.0-native-fb-ebf7318e-20250422",
1606516101
rendererPackageName: "react-dom",
1606616102
currentDispatcherRef: ReactSharedInternals,
16067-
reconcilerVersion: "19.2.0-native-fb-b04254fd-20250415"
16103+
reconcilerVersion: "19.2.0-native-fb-ebf7318e-20250422"
1606816104
};
1606916105
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
16070-
var hook$jscomp$inline_2262 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
16106+
var hook$jscomp$inline_2268 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
1607116107
if (
16072-
!hook$jscomp$inline_2262.isDisabled &&
16073-
hook$jscomp$inline_2262.supportsFiber
16108+
!hook$jscomp$inline_2268.isDisabled &&
16109+
hook$jscomp$inline_2268.supportsFiber
1607416110
)
1607516111
try {
16076-
(rendererID = hook$jscomp$inline_2262.inject(
16077-
internals$jscomp$inline_2261
16112+
(rendererID = hook$jscomp$inline_2268.inject(
16113+
internals$jscomp$inline_2267
1607816114
)),
16079-
(injectedHook = hook$jscomp$inline_2262);
16115+
(injectedHook = hook$jscomp$inline_2268);
1608016116
} catch (err) {}
1608116117
}
1608216118
exports.createRoot = function (container, options) {
@@ -16168,4 +16204,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1616816204
listenToAllSupportedEvents(container);
1616916205
return new ReactDOMHydrationRoot(initialChildren);
1617016206
};
16171-
exports.version = "19.2.0-native-fb-b04254fd-20250415";
16207+
exports.version = "19.2.0-native-fb-ebf7318e-20250422";

0 commit comments

Comments
 (0)