mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Bugfix: Selective hydration triggers false update loop error (#27439)
This adds a regression test and fix for a case where a sync update triggers selective hydration, which then leads to a "Maximum update depth exceeded" error, even though there was only a single update. This happens when a single sync update flows into many sibling dehydrated Suspense boundaries. This fix is, if a commit was the result of selective hydration, we should not increment the nested update count, because those renders conceptually are not updates. Ideally, they wouldn't even be in a separate commit — we should be able to hydrate a tree and apply an update on top of it within the same render phase. We could do this once we implement resumable context stacks. DiffTrain build for commit https://github.com/facebook/react/commit/d900fadbf9017063fecb2641b7e99303b82a6f17.
This commit is contained in:
+17
-5
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<aab7866dd4ea4a33aa518692d1dfa02f>>
|
||||
* @generated SignedSource<<3cf0c7070b82c229b406663b7dbae937>>
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -1073,6 +1073,7 @@ var DefaultHydrationLane =
|
||||
var DefaultLane =
|
||||
/* */
|
||||
32;
|
||||
var SyncUpdateLanes = SyncLane;
|
||||
var TransitionHydrationLane =
|
||||
/* */
|
||||
64;
|
||||
@@ -1157,7 +1158,11 @@ var IdleLane =
|
||||
536870912;
|
||||
var OffscreenLane =
|
||||
/* */
|
||||
1073741824; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
1073741824; // Any lane that might schedule an update. This is used to detect infinite
|
||||
// update loops, so it doesn't include hydration lanes or retries.
|
||||
|
||||
var UpdateLanes =
|
||||
SyncLane | InputContinuousLane | DefaultLane | TransitionLanes; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
var NoTimestamp = -1;
|
||||
var nextTransitionLane = TransitionLane1;
|
||||
var nextRetryLane = RetryLane1;
|
||||
@@ -22064,9 +22069,16 @@ function commitRootImpl(
|
||||
flushPassiveEffects();
|
||||
} // Read this again, since a passive effect might have updated it
|
||||
|
||||
remainingLanes = root.pendingLanes;
|
||||
remainingLanes = root.pendingLanes; // Check if this render scheduled a cascading synchronous update. This is a
|
||||
// heurstic to detect infinite update loops. We are intentionally excluding
|
||||
// hydration lanes in this check, because render triggered by selective
|
||||
// hydration is conceptually not an update.
|
||||
|
||||
if (includesSyncLane(remainingLanes)) {
|
||||
if (
|
||||
// Was the finished render the result of an update (not hydration)?
|
||||
includesSomeLane(lanes, UpdateLanes) && // Did it schedule a sync update?
|
||||
includesSomeLane(remainingLanes, SyncUpdateLanes)
|
||||
) {
|
||||
{
|
||||
markNestedUpdateScheduled();
|
||||
} // Count the number of times the root synchronously re-renders without
|
||||
@@ -23985,7 +23997,7 @@ function createFiberRoot(
|
||||
return root;
|
||||
}
|
||||
|
||||
var ReactVersion = "18.3.0-canary-13d0225c7-20230928";
|
||||
var ReactVersion = "18.3.0-canary-d900fadbf-20230929";
|
||||
|
||||
// Might add PROFILE later.
|
||||
|
||||
|
||||
+9
-9
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<9dc743c9a683670534bfd600e2d75ee4>>
|
||||
* @generated SignedSource<<14e99fd9af6d1296fe24000cb0277c83>>
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
@@ -7302,12 +7302,12 @@ function commitRootImpl(
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[finishedWork]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(transitions = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, transitions);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -7319,7 +7319,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (lanes & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
: ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))
|
||||
@@ -8623,7 +8623,7 @@ var devToolsConfig$jscomp$inline_1030 = {
|
||||
throw Error("TestRenderer does not support findFiberByHostInstance()");
|
||||
},
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-13d0225c7-20230928",
|
||||
version: "18.3.0-canary-d900fadbf-20230929",
|
||||
rendererPackageName: "react-test-renderer"
|
||||
};
|
||||
var internals$jscomp$inline_1229 = {
|
||||
@@ -8654,7 +8654,7 @@ var internals$jscomp$inline_1229 = {
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-13d0225c7-20230928"
|
||||
reconcilerVersion: "18.3.0-canary-d900fadbf-20230929"
|
||||
};
|
||||
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
|
||||
var hook$jscomp$inline_1230 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
|
||||
|
||||
+9
-9
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<429b5d46fdda6991b1590ed4f8ef58b2>>
|
||||
* @generated SignedSource<<56dc6116bc4d9736f3dd6138f782afb8>>
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
@@ -7664,12 +7664,12 @@ function commitRootImpl(
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[finishedWork]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(transitions = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, transitions);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -7681,7 +7681,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (lanes & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? ((nestedUpdateScheduled = !0),
|
||||
root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
@@ -9049,7 +9049,7 @@ var devToolsConfig$jscomp$inline_1072 = {
|
||||
throw Error("TestRenderer does not support findFiberByHostInstance()");
|
||||
},
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-13d0225c7-20230928",
|
||||
version: "18.3.0-canary-d900fadbf-20230929",
|
||||
rendererPackageName: "react-test-renderer"
|
||||
};
|
||||
var internals$jscomp$inline_1270 = {
|
||||
@@ -9080,7 +9080,7 @@ var internals$jscomp$inline_1270 = {
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-13d0225c7-20230928"
|
||||
reconcilerVersion: "18.3.0-canary-d900fadbf-20230929"
|
||||
};
|
||||
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
|
||||
var hook$jscomp$inline_1271 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ if (
|
||||
}
|
||||
"use strict";
|
||||
|
||||
var ReactVersion = "18.3.0-canary-13d0225c7-20230928";
|
||||
var ReactVersion = "18.3.0-canary-d900fadbf-20230929";
|
||||
|
||||
// ATTENTION
|
||||
// When adding new symbols to this file,
|
||||
|
||||
+1
-1
@@ -616,4 +616,4 @@ exports.useSyncExternalStore = function (
|
||||
exports.useTransition = function () {
|
||||
return ReactCurrentDispatcher.current.useTransition();
|
||||
};
|
||||
exports.version = "18.3.0-canary-13d0225c7-20230928";
|
||||
exports.version = "18.3.0-canary-d900fadbf-20230929";
|
||||
|
||||
+1
-1
@@ -619,7 +619,7 @@ exports.useSyncExternalStore = function (
|
||||
exports.useTransition = function () {
|
||||
return ReactCurrentDispatcher.current.useTransition();
|
||||
};
|
||||
exports.version = "18.3.0-canary-13d0225c7-20230928";
|
||||
exports.version = "18.3.0-canary-d900fadbf-20230929";
|
||||
|
||||
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
||||
if (
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
13d0225c7d4715d98772a85d8deb26d244921287
|
||||
d900fadbf9017063fecb2641b7e99303b82a6f17
|
||||
|
||||
+17
-5
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<f96d625b3a84e085323266384ba6cb78>>
|
||||
* @generated SignedSource<<86fb5a18e030273bb12b79024c6073c2>>
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -3925,6 +3925,7 @@ var DefaultHydrationLane =
|
||||
var DefaultLane =
|
||||
/* */
|
||||
32;
|
||||
var SyncUpdateLanes = SyncLane;
|
||||
var TransitionHydrationLane =
|
||||
/* */
|
||||
64;
|
||||
@@ -4009,7 +4010,11 @@ var IdleLane =
|
||||
536870912;
|
||||
var OffscreenLane =
|
||||
/* */
|
||||
1073741824; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
1073741824; // Any lane that might schedule an update. This is used to detect infinite
|
||||
// update loops, so it doesn't include hydration lanes or retries.
|
||||
|
||||
var UpdateLanes =
|
||||
SyncLane | InputContinuousLane | DefaultLane | TransitionLanes; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
// It should be kept in sync with the Lanes values above.
|
||||
|
||||
function getLabelForLane(lane) {
|
||||
@@ -24973,9 +24978,16 @@ function commitRootImpl(
|
||||
flushPassiveEffects();
|
||||
} // Read this again, since a passive effect might have updated it
|
||||
|
||||
remainingLanes = root.pendingLanes;
|
||||
remainingLanes = root.pendingLanes; // Check if this render scheduled a cascading synchronous update. This is a
|
||||
// heurstic to detect infinite update loops. We are intentionally excluding
|
||||
// hydration lanes in this check, because render triggered by selective
|
||||
// hydration is conceptually not an update.
|
||||
|
||||
if (includesSyncLane(remainingLanes)) {
|
||||
if (
|
||||
// Was the finished render the result of an update (not hydration)?
|
||||
includesSomeLane(lanes, UpdateLanes) && // Did it schedule a sync update?
|
||||
includesSomeLane(remainingLanes, SyncUpdateLanes)
|
||||
) {
|
||||
{
|
||||
markNestedUpdateScheduled();
|
||||
} // Count the number of times the root synchronously re-renders without
|
||||
@@ -27022,7 +27034,7 @@ function createFiberRoot(
|
||||
return root;
|
||||
}
|
||||
|
||||
var ReactVersion = "18.3.0-canary-d111ec43";
|
||||
var ReactVersion = "18.3.0-canary-84876954";
|
||||
|
||||
function createPortal$1(
|
||||
children,
|
||||
|
||||
+28
-28
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<797c622016220d3670cc8ec55829f5d2>>
|
||||
* @generated SignedSource<<c369fd4070037f1dc7d616d80d10dcfd>>
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
@@ -8233,34 +8233,34 @@ function commitRootImpl(
|
||||
while (null !== rootWithPendingPassiveEffects);
|
||||
if (0 !== (executionContext & 6))
|
||||
throw Error("Should not already be working.");
|
||||
transitions = root.finishedWork;
|
||||
var lanes = root.finishedLanes;
|
||||
if (null === transitions) return null;
|
||||
var finishedWork = root.finishedWork;
|
||||
transitions = root.finishedLanes;
|
||||
if (null === finishedWork) return null;
|
||||
root.finishedWork = null;
|
||||
root.finishedLanes = 0;
|
||||
if (transitions === root.current)
|
||||
if (finishedWork === root.current)
|
||||
throw Error(
|
||||
"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
|
||||
);
|
||||
root.callbackNode = null;
|
||||
root.callbackPriority = 0;
|
||||
root.cancelPendingCommit = null;
|
||||
var remainingLanes = transitions.lanes | transitions.childLanes;
|
||||
var remainingLanes = finishedWork.lanes | finishedWork.childLanes;
|
||||
remainingLanes |= concurrentlyUpdatedLanes;
|
||||
markRootFinished(root, remainingLanes);
|
||||
root === workInProgressRoot &&
|
||||
((workInProgress = workInProgressRoot = null),
|
||||
(workInProgressRootRenderLanes = 0));
|
||||
(0 === (transitions.subtreeFlags & 10256) &&
|
||||
0 === (transitions.flags & 10256)) ||
|
||||
(0 === (finishedWork.subtreeFlags & 10256) &&
|
||||
0 === (finishedWork.flags & 10256)) ||
|
||||
rootDoesHavePassiveEffects ||
|
||||
((rootDoesHavePassiveEffects = !0),
|
||||
scheduleCallback(NormalPriority, function () {
|
||||
flushPassiveEffects();
|
||||
return null;
|
||||
}));
|
||||
remainingLanes = 0 !== (transitions.flags & 15990);
|
||||
if (0 !== (transitions.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = 0 !== (finishedWork.flags & 15990);
|
||||
if (0 !== (finishedWork.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = ReactCurrentBatchConfig.transition;
|
||||
ReactCurrentBatchConfig.transition = null;
|
||||
var previousPriority = currentUpdatePriority;
|
||||
@@ -8268,35 +8268,35 @@ function commitRootImpl(
|
||||
var prevExecutionContext = executionContext;
|
||||
executionContext |= 4;
|
||||
ReactCurrentOwner.current = null;
|
||||
commitBeforeMutationEffects(root, transitions);
|
||||
commitMutationEffectsOnFiber(transitions, root);
|
||||
root.current = transitions;
|
||||
commitLayoutEffectOnFiber(root, transitions.alternate, transitions);
|
||||
commitBeforeMutationEffects(root, finishedWork);
|
||||
commitMutationEffectsOnFiber(finishedWork, root);
|
||||
root.current = finishedWork;
|
||||
commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);
|
||||
requestPaint();
|
||||
executionContext = prevExecutionContext;
|
||||
currentUpdatePriority = previousPriority;
|
||||
ReactCurrentBatchConfig.transition = remainingLanes;
|
||||
} else root.current = transitions;
|
||||
} else root.current = finishedWork;
|
||||
rootDoesHavePassiveEffects &&
|
||||
((rootDoesHavePassiveEffects = !1),
|
||||
(rootWithPendingPassiveEffects = root),
|
||||
(pendingPassiveEffectsLanes = lanes));
|
||||
(pendingPassiveEffectsLanes = transitions));
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
|
||||
onCommitRoot(transitions.stateNode, renderPriorityLevel);
|
||||
onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
|
||||
ensureRootIsScheduled(root);
|
||||
if (null !== recoverableErrors)
|
||||
for (
|
||||
renderPriorityLevel = root.onRecoverableError, transitions = 0;
|
||||
transitions < recoverableErrors.length;
|
||||
transitions++
|
||||
renderPriorityLevel = root.onRecoverableError, finishedWork = 0;
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[transitions]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(previousPriority = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, previousPriority);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -8308,7 +8308,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (transitions & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
: ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))
|
||||
@@ -9428,7 +9428,7 @@ var roots = new Map(),
|
||||
devToolsConfig$jscomp$inline_1039 = {
|
||||
findFiberByHostInstance: getInstanceFromNode,
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-aa452ea5",
|
||||
version: "18.3.0-canary-0ca674fe",
|
||||
rendererPackageName: "react-native-renderer",
|
||||
rendererConfig: {
|
||||
getInspectorDataForInstance: getInspectorDataForInstance,
|
||||
@@ -9471,7 +9471,7 @@ var internals$jscomp$inline_1281 = {
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-aa452ea5"
|
||||
reconcilerVersion: "18.3.0-canary-0ca674fe"
|
||||
};
|
||||
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
|
||||
var hook$jscomp$inline_1282 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
|
||||
|
||||
+30
-30
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<0f6895c278fc07ac65d927cf7df07416>>
|
||||
* @generated SignedSource<<414a6a10fa06a82746a814c00a3d620f>>
|
||||
*/
|
||||
|
||||
|
||||
@@ -8840,37 +8840,37 @@ function commitRootImpl(
|
||||
while (null !== rootWithPendingPassiveEffects);
|
||||
if (0 !== (executionContext & 6))
|
||||
throw Error("Should not already be working.");
|
||||
transitions = root.finishedWork;
|
||||
var lanes = root.finishedLanes;
|
||||
var finishedWork = root.finishedWork;
|
||||
transitions = root.finishedLanes;
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markCommitStarted &&
|
||||
injectedProfilingHooks.markCommitStarted(lanes);
|
||||
if (null === transitions) return markCommitStopped(), null;
|
||||
injectedProfilingHooks.markCommitStarted(transitions);
|
||||
if (null === finishedWork) return markCommitStopped(), null;
|
||||
root.finishedWork = null;
|
||||
root.finishedLanes = 0;
|
||||
if (transitions === root.current)
|
||||
if (finishedWork === root.current)
|
||||
throw Error(
|
||||
"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
|
||||
);
|
||||
root.callbackNode = null;
|
||||
root.callbackPriority = 0;
|
||||
root.cancelPendingCommit = null;
|
||||
var remainingLanes = transitions.lanes | transitions.childLanes;
|
||||
var remainingLanes = finishedWork.lanes | finishedWork.childLanes;
|
||||
remainingLanes |= concurrentlyUpdatedLanes;
|
||||
markRootFinished(root, remainingLanes);
|
||||
root === workInProgressRoot &&
|
||||
((workInProgress = workInProgressRoot = null),
|
||||
(workInProgressRootRenderLanes = 0));
|
||||
(0 === (transitions.subtreeFlags & 10256) &&
|
||||
0 === (transitions.flags & 10256)) ||
|
||||
(0 === (finishedWork.subtreeFlags & 10256) &&
|
||||
0 === (finishedWork.flags & 10256)) ||
|
||||
rootDoesHavePassiveEffects ||
|
||||
((rootDoesHavePassiveEffects = !0),
|
||||
scheduleCallback(NormalPriority, function () {
|
||||
flushPassiveEffects();
|
||||
return null;
|
||||
}));
|
||||
remainingLanes = 0 !== (transitions.flags & 15990);
|
||||
if (0 !== (transitions.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = 0 !== (finishedWork.flags & 15990);
|
||||
if (0 !== (finishedWork.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = ReactCurrentBatchConfig.transition;
|
||||
ReactCurrentBatchConfig.transition = null;
|
||||
var previousPriority = currentUpdatePriority;
|
||||
@@ -8878,14 +8878,14 @@ function commitRootImpl(
|
||||
var prevExecutionContext = executionContext;
|
||||
executionContext |= 4;
|
||||
ReactCurrentOwner.current = null;
|
||||
commitBeforeMutationEffects(root, transitions);
|
||||
commitBeforeMutationEffects(root, finishedWork);
|
||||
commitTime = now();
|
||||
commitMutationEffects(root, transitions, lanes);
|
||||
root.current = transitions;
|
||||
commitMutationEffects(root, finishedWork, transitions);
|
||||
root.current = finishedWork;
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markLayoutEffectsStarted &&
|
||||
injectedProfilingHooks.markLayoutEffectsStarted(lanes);
|
||||
commitLayoutEffects(transitions, root, lanes);
|
||||
injectedProfilingHooks.markLayoutEffectsStarted(transitions);
|
||||
commitLayoutEffects(finishedWork, root, transitions);
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markLayoutEffectsStopped &&
|
||||
injectedProfilingHooks.markLayoutEffectsStopped();
|
||||
@@ -8893,28 +8893,28 @@ function commitRootImpl(
|
||||
executionContext = prevExecutionContext;
|
||||
currentUpdatePriority = previousPriority;
|
||||
ReactCurrentBatchConfig.transition = remainingLanes;
|
||||
} else (root.current = transitions), (commitTime = now());
|
||||
} else (root.current = finishedWork), (commitTime = now());
|
||||
rootDoesHavePassiveEffects &&
|
||||
((rootDoesHavePassiveEffects = !1),
|
||||
(rootWithPendingPassiveEffects = root),
|
||||
(pendingPassiveEffectsLanes = lanes));
|
||||
(pendingPassiveEffectsLanes = transitions));
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
|
||||
onCommitRoot(transitions.stateNode, renderPriorityLevel);
|
||||
onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
|
||||
isDevToolsPresent && root.memoizedUpdaters.clear();
|
||||
ensureRootIsScheduled(root);
|
||||
if (null !== recoverableErrors)
|
||||
for (
|
||||
renderPriorityLevel = root.onRecoverableError, transitions = 0;
|
||||
transitions < recoverableErrors.length;
|
||||
transitions++
|
||||
renderPriorityLevel = root.onRecoverableError, finishedWork = 0;
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[transitions]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(previousPriority = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, previousPriority);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -8926,7 +8926,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (transitions & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? ((nestedUpdateScheduled = !0),
|
||||
root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
@@ -10136,7 +10136,7 @@ var roots = new Map(),
|
||||
devToolsConfig$jscomp$inline_1117 = {
|
||||
findFiberByHostInstance: getInstanceFromNode,
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-25e3e8de",
|
||||
version: "18.3.0-canary-075b6563",
|
||||
rendererPackageName: "react-native-renderer",
|
||||
rendererConfig: {
|
||||
getInspectorDataForInstance: getInspectorDataForInstance,
|
||||
@@ -10192,7 +10192,7 @@ var roots = new Map(),
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-25e3e8de"
|
||||
reconcilerVersion: "18.3.0-canary-075b6563"
|
||||
});
|
||||
exports.createPortal = function (children, containerTag) {
|
||||
return createPortal$1(
|
||||
|
||||
+17
-5
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<2d71adbdffd050f9fdb224b803be60c1>>
|
||||
* @generated SignedSource<<3ef3b6c24cd3072b8a7244b669c781b8>>
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -4785,6 +4785,7 @@ var DefaultHydrationLane =
|
||||
var DefaultLane =
|
||||
/* */
|
||||
32;
|
||||
var SyncUpdateLanes = SyncLane;
|
||||
var TransitionHydrationLane =
|
||||
/* */
|
||||
64;
|
||||
@@ -4869,7 +4870,11 @@ var IdleLane =
|
||||
536870912;
|
||||
var OffscreenLane =
|
||||
/* */
|
||||
1073741824; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
1073741824; // Any lane that might schedule an update. This is used to detect infinite
|
||||
// update loops, so it doesn't include hydration lanes or retries.
|
||||
|
||||
var UpdateLanes =
|
||||
SyncLane | InputContinuousLane | DefaultLane | TransitionLanes; // This function is used for the experimental timeline (react-devtools-timeline)
|
||||
// It should be kept in sync with the Lanes values above.
|
||||
|
||||
function getLabelForLane(lane) {
|
||||
@@ -25491,9 +25496,16 @@ function commitRootImpl(
|
||||
flushPassiveEffects();
|
||||
} // Read this again, since a passive effect might have updated it
|
||||
|
||||
remainingLanes = root.pendingLanes;
|
||||
remainingLanes = root.pendingLanes; // Check if this render scheduled a cascading synchronous update. This is a
|
||||
// heurstic to detect infinite update loops. We are intentionally excluding
|
||||
// hydration lanes in this check, because render triggered by selective
|
||||
// hydration is conceptually not an update.
|
||||
|
||||
if (includesSyncLane(remainingLanes)) {
|
||||
if (
|
||||
// Was the finished render the result of an update (not hydration)?
|
||||
includesSomeLane(lanes, UpdateLanes) && // Did it schedule a sync update?
|
||||
includesSomeLane(remainingLanes, SyncUpdateLanes)
|
||||
) {
|
||||
{
|
||||
markNestedUpdateScheduled();
|
||||
} // Count the number of times the root synchronously re-renders without
|
||||
@@ -27540,7 +27552,7 @@ function createFiberRoot(
|
||||
return root;
|
||||
}
|
||||
|
||||
var ReactVersion = "18.3.0-canary-8c031077";
|
||||
var ReactVersion = "18.3.0-canary-596cae65";
|
||||
|
||||
function createPortal$1(
|
||||
children,
|
||||
|
||||
+28
-28
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<d1787169e7d5a11b8338706621e36199>>
|
||||
* @generated SignedSource<<a14762fc8ef590b3d2e8b935d1234408>>
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
@@ -8482,34 +8482,34 @@ function commitRootImpl(
|
||||
while (null !== rootWithPendingPassiveEffects);
|
||||
if (0 !== (executionContext & 6))
|
||||
throw Error("Should not already be working.");
|
||||
transitions = root.finishedWork;
|
||||
var lanes = root.finishedLanes;
|
||||
if (null === transitions) return null;
|
||||
var finishedWork = root.finishedWork;
|
||||
transitions = root.finishedLanes;
|
||||
if (null === finishedWork) return null;
|
||||
root.finishedWork = null;
|
||||
root.finishedLanes = 0;
|
||||
if (transitions === root.current)
|
||||
if (finishedWork === root.current)
|
||||
throw Error(
|
||||
"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
|
||||
);
|
||||
root.callbackNode = null;
|
||||
root.callbackPriority = 0;
|
||||
root.cancelPendingCommit = null;
|
||||
var remainingLanes = transitions.lanes | transitions.childLanes;
|
||||
var remainingLanes = finishedWork.lanes | finishedWork.childLanes;
|
||||
remainingLanes |= concurrentlyUpdatedLanes;
|
||||
markRootFinished(root, remainingLanes);
|
||||
root === workInProgressRoot &&
|
||||
((workInProgress = workInProgressRoot = null),
|
||||
(workInProgressRootRenderLanes = 0));
|
||||
(0 === (transitions.subtreeFlags & 10256) &&
|
||||
0 === (transitions.flags & 10256)) ||
|
||||
(0 === (finishedWork.subtreeFlags & 10256) &&
|
||||
0 === (finishedWork.flags & 10256)) ||
|
||||
rootDoesHavePassiveEffects ||
|
||||
((rootDoesHavePassiveEffects = !0),
|
||||
scheduleCallback(NormalPriority, function () {
|
||||
flushPassiveEffects();
|
||||
return null;
|
||||
}));
|
||||
remainingLanes = 0 !== (transitions.flags & 15990);
|
||||
if (0 !== (transitions.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = 0 !== (finishedWork.flags & 15990);
|
||||
if (0 !== (finishedWork.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = ReactCurrentBatchConfig.transition;
|
||||
ReactCurrentBatchConfig.transition = null;
|
||||
var previousPriority = currentUpdatePriority;
|
||||
@@ -8517,35 +8517,35 @@ function commitRootImpl(
|
||||
var prevExecutionContext = executionContext;
|
||||
executionContext |= 4;
|
||||
ReactCurrentOwner.current = null;
|
||||
commitBeforeMutationEffects(root, transitions);
|
||||
commitMutationEffectsOnFiber(transitions, root);
|
||||
root.current = transitions;
|
||||
commitLayoutEffectOnFiber(root, transitions.alternate, transitions);
|
||||
commitBeforeMutationEffects(root, finishedWork);
|
||||
commitMutationEffectsOnFiber(finishedWork, root);
|
||||
root.current = finishedWork;
|
||||
commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);
|
||||
requestPaint();
|
||||
executionContext = prevExecutionContext;
|
||||
currentUpdatePriority = previousPriority;
|
||||
ReactCurrentBatchConfig.transition = remainingLanes;
|
||||
} else root.current = transitions;
|
||||
} else root.current = finishedWork;
|
||||
rootDoesHavePassiveEffects &&
|
||||
((rootDoesHavePassiveEffects = !1),
|
||||
(rootWithPendingPassiveEffects = root),
|
||||
(pendingPassiveEffectsLanes = lanes));
|
||||
(pendingPassiveEffectsLanes = transitions));
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
|
||||
onCommitRoot(transitions.stateNode, renderPriorityLevel);
|
||||
onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
|
||||
ensureRootIsScheduled(root);
|
||||
if (null !== recoverableErrors)
|
||||
for (
|
||||
renderPriorityLevel = root.onRecoverableError, transitions = 0;
|
||||
transitions < recoverableErrors.length;
|
||||
transitions++
|
||||
renderPriorityLevel = root.onRecoverableError, finishedWork = 0;
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[transitions]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(previousPriority = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, previousPriority);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -8557,7 +8557,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (transitions & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
: ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))
|
||||
@@ -9684,7 +9684,7 @@ var roots = new Map(),
|
||||
devToolsConfig$jscomp$inline_1095 = {
|
||||
findFiberByHostInstance: getInstanceFromTag,
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-4d2231a3",
|
||||
version: "18.3.0-canary-d65fcabf",
|
||||
rendererPackageName: "react-native-renderer",
|
||||
rendererConfig: {
|
||||
getInspectorDataForInstance: getInspectorDataForInstance,
|
||||
@@ -9727,7 +9727,7 @@ var internals$jscomp$inline_1351 = {
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-4d2231a3"
|
||||
reconcilerVersion: "18.3.0-canary-d65fcabf"
|
||||
};
|
||||
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
|
||||
var hook$jscomp$inline_1352 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
|
||||
|
||||
+30
-30
@@ -7,7 +7,7 @@
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @generated SignedSource<<659cac4b58600e455321606aec9dc5df>>
|
||||
* @generated SignedSource<<65220b0abaca69059de8c8cc2114af51>>
|
||||
*/
|
||||
|
||||
|
||||
@@ -9089,37 +9089,37 @@ function commitRootImpl(
|
||||
while (null !== rootWithPendingPassiveEffects);
|
||||
if (0 !== (executionContext & 6))
|
||||
throw Error("Should not already be working.");
|
||||
transitions = root.finishedWork;
|
||||
var lanes = root.finishedLanes;
|
||||
var finishedWork = root.finishedWork;
|
||||
transitions = root.finishedLanes;
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markCommitStarted &&
|
||||
injectedProfilingHooks.markCommitStarted(lanes);
|
||||
if (null === transitions) return markCommitStopped(), null;
|
||||
injectedProfilingHooks.markCommitStarted(transitions);
|
||||
if (null === finishedWork) return markCommitStopped(), null;
|
||||
root.finishedWork = null;
|
||||
root.finishedLanes = 0;
|
||||
if (transitions === root.current)
|
||||
if (finishedWork === root.current)
|
||||
throw Error(
|
||||
"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
|
||||
);
|
||||
root.callbackNode = null;
|
||||
root.callbackPriority = 0;
|
||||
root.cancelPendingCommit = null;
|
||||
var remainingLanes = transitions.lanes | transitions.childLanes;
|
||||
var remainingLanes = finishedWork.lanes | finishedWork.childLanes;
|
||||
remainingLanes |= concurrentlyUpdatedLanes;
|
||||
markRootFinished(root, remainingLanes);
|
||||
root === workInProgressRoot &&
|
||||
((workInProgress = workInProgressRoot = null),
|
||||
(workInProgressRootRenderLanes = 0));
|
||||
(0 === (transitions.subtreeFlags & 10256) &&
|
||||
0 === (transitions.flags & 10256)) ||
|
||||
(0 === (finishedWork.subtreeFlags & 10256) &&
|
||||
0 === (finishedWork.flags & 10256)) ||
|
||||
rootDoesHavePassiveEffects ||
|
||||
((rootDoesHavePassiveEffects = !0),
|
||||
scheduleCallback(NormalPriority, function () {
|
||||
flushPassiveEffects();
|
||||
return null;
|
||||
}));
|
||||
remainingLanes = 0 !== (transitions.flags & 15990);
|
||||
if (0 !== (transitions.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = 0 !== (finishedWork.flags & 15990);
|
||||
if (0 !== (finishedWork.subtreeFlags & 15990) || remainingLanes) {
|
||||
remainingLanes = ReactCurrentBatchConfig.transition;
|
||||
ReactCurrentBatchConfig.transition = null;
|
||||
var previousPriority = currentUpdatePriority;
|
||||
@@ -9127,14 +9127,14 @@ function commitRootImpl(
|
||||
var prevExecutionContext = executionContext;
|
||||
executionContext |= 4;
|
||||
ReactCurrentOwner.current = null;
|
||||
commitBeforeMutationEffects(root, transitions);
|
||||
commitBeforeMutationEffects(root, finishedWork);
|
||||
commitTime = now();
|
||||
commitMutationEffects(root, transitions, lanes);
|
||||
root.current = transitions;
|
||||
commitMutationEffects(root, finishedWork, transitions);
|
||||
root.current = finishedWork;
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markLayoutEffectsStarted &&
|
||||
injectedProfilingHooks.markLayoutEffectsStarted(lanes);
|
||||
commitLayoutEffects(transitions, root, lanes);
|
||||
injectedProfilingHooks.markLayoutEffectsStarted(transitions);
|
||||
commitLayoutEffects(finishedWork, root, transitions);
|
||||
null !== injectedProfilingHooks &&
|
||||
"function" === typeof injectedProfilingHooks.markLayoutEffectsStopped &&
|
||||
injectedProfilingHooks.markLayoutEffectsStopped();
|
||||
@@ -9142,28 +9142,28 @@ function commitRootImpl(
|
||||
executionContext = prevExecutionContext;
|
||||
currentUpdatePriority = previousPriority;
|
||||
ReactCurrentBatchConfig.transition = remainingLanes;
|
||||
} else (root.current = transitions), (commitTime = now());
|
||||
} else (root.current = finishedWork), (commitTime = now());
|
||||
rootDoesHavePassiveEffects &&
|
||||
((rootDoesHavePassiveEffects = !1),
|
||||
(rootWithPendingPassiveEffects = root),
|
||||
(pendingPassiveEffectsLanes = lanes));
|
||||
(pendingPassiveEffectsLanes = transitions));
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
|
||||
onCommitRoot(transitions.stateNode, renderPriorityLevel);
|
||||
onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
|
||||
isDevToolsPresent && root.memoizedUpdaters.clear();
|
||||
ensureRootIsScheduled(root);
|
||||
if (null !== recoverableErrors)
|
||||
for (
|
||||
renderPriorityLevel = root.onRecoverableError, transitions = 0;
|
||||
transitions < recoverableErrors.length;
|
||||
transitions++
|
||||
renderPriorityLevel = root.onRecoverableError, finishedWork = 0;
|
||||
finishedWork < recoverableErrors.length;
|
||||
finishedWork++
|
||||
)
|
||||
(lanes = recoverableErrors[transitions]),
|
||||
(remainingLanes = {
|
||||
digest: lanes.digest,
|
||||
componentStack: lanes.stack
|
||||
(remainingLanes = recoverableErrors[finishedWork]),
|
||||
(previousPriority = {
|
||||
digest: remainingLanes.digest,
|
||||
componentStack: remainingLanes.stack
|
||||
}),
|
||||
renderPriorityLevel(lanes.value, remainingLanes);
|
||||
renderPriorityLevel(remainingLanes.value, previousPriority);
|
||||
if (hasUncaughtError)
|
||||
throw (
|
||||
((hasUncaughtError = !1),
|
||||
@@ -9175,7 +9175,7 @@ function commitRootImpl(
|
||||
0 !== root.tag &&
|
||||
flushPassiveEffects();
|
||||
remainingLanes = root.pendingLanes;
|
||||
0 !== (remainingLanes & 3)
|
||||
0 !== (transitions & 8388522) && 0 !== (remainingLanes & 2)
|
||||
? ((nestedUpdateScheduled = !0),
|
||||
root === rootWithNestedUpdates
|
||||
? nestedUpdateCount++
|
||||
@@ -10392,7 +10392,7 @@ var roots = new Map(),
|
||||
devToolsConfig$jscomp$inline_1173 = {
|
||||
findFiberByHostInstance: getInstanceFromTag,
|
||||
bundleType: 0,
|
||||
version: "18.3.0-canary-20c60c11",
|
||||
version: "18.3.0-canary-1ba6f60e",
|
||||
rendererPackageName: "react-native-renderer",
|
||||
rendererConfig: {
|
||||
getInspectorDataForInstance: getInspectorDataForInstance,
|
||||
@@ -10448,7 +10448,7 @@ var roots = new Map(),
|
||||
scheduleRoot: null,
|
||||
setRefreshHandler: null,
|
||||
getCurrentFiber: null,
|
||||
reconcilerVersion: "18.3.0-canary-20c60c11"
|
||||
reconcilerVersion: "18.3.0-canary-1ba6f60e"
|
||||
});
|
||||
exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
|
||||
computeComponentStackForErrorReporting: function (reactTag) {
|
||||
|
||||
Reference in New Issue
Block a user