Skip to content

Commit b38019b

Browse files
committed
act: Move didScheduleLegacyUpdate to ensureRootIsScheduled (#26552)
`act` uses the `didScheduleLegacyUpdate` field to simulate the behavior of batching in React <17 and below. It's a quirk leftover from a previous implementation, not intentionally designed. This sets `didScheduleLegacyUpdate` every time a legacy root receives an update as opposed to only when the `executionContext` is empty. There's no real reason to do it this way over some other way except that it's how it used to work before #26512 and we should try our best to maintain the existing behavior, quirks and all, since existing tests may have come to accidentally rely on it. This should fix some (though not all) of the internal Meta tests that started failing after #26512 landed. Will add a regression test before merging. DiffTrain build for commit fec97ec.
1 parent 737b75e commit b38019b

File tree

13 files changed

+40
-31
lines changed

13 files changed

+40
-31
lines changed

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-dev.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19471,6 +19471,11 @@ function ensureRootIsScheduled(root) {
1947119471
scheduleImmediateTask(processRootScheduleInMicrotask);
1947219472
}
1947319473
}
19474+
19475+
if (ReactCurrentActQueue$1.isBatchingLegacy && root.tag === LegacyRoot) {
19476+
// Special `act` case: Record whenever a legacy update is scheduled.
19477+
ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;
19478+
}
1947419479
}
1947519480
function flushSyncWorkOnAllRoots() {
1947619481
// This is allowed to be called synchronously, but the caller should check
@@ -20081,10 +20086,8 @@ function scheduleUpdateOnFiber(root, fiber, lane, eventTime) {
2008120086
executionContext === NoContext &&
2008220087
(fiber.mode & ConcurrentMode) === NoMode
2008320088
) {
20084-
if (ReactCurrentActQueue.isBatchingLegacy) {
20085-
// Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
20086-
ReactCurrentActQueue.didScheduleLegacyUpdate = true;
20087-
} else {
20089+
if (ReactCurrentActQueue.isBatchingLegacy);
20090+
else {
2008820091
// Flush the synchronous work now, unless we're already working or inside
2008920092
// a batch. This is intentionally inside scheduleUpdateOnFiber instead of
2009020093
// scheduleCallbackForFiber to preserve the ability to schedule a callback
@@ -23888,7 +23891,7 @@ function createFiberRoot(
2388823891
return root;
2388923892
}
2389023893

23891-
var ReactVersion = "18.3.0-next-9a9da7721-20230409";
23894+
var ReactVersion = "18.3.0-next-fec97ecbc-20230410";
2389223895

2389323896
// Might add PROFILE later.
2389423897

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-prod.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8688,7 +8688,7 @@ var devToolsConfig$jscomp$inline_1028 = {
86888688
throw Error("TestRenderer does not support findFiberByHostInstance()");
86898689
},
86908690
bundleType: 0,
8691-
version: "18.3.0-next-9a9da7721-20230409",
8691+
version: "18.3.0-next-fec97ecbc-20230410",
86928692
rendererPackageName: "react-test-renderer"
86938693
};
86948694
var internals$jscomp$inline_1220 = {
@@ -8719,7 +8719,7 @@ var internals$jscomp$inline_1220 = {
87198719
scheduleRoot: null,
87208720
setRefreshHandler: null,
87218721
getCurrentFiber: null,
8722-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
8722+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
87238723
};
87248724
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
87258725
var hook$jscomp$inline_1221 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-profiling.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9114,7 +9114,7 @@ var devToolsConfig$jscomp$inline_1070 = {
91149114
throw Error("TestRenderer does not support findFiberByHostInstance()");
91159115
},
91169116
bundleType: 0,
9117-
version: "18.3.0-next-9a9da7721-20230409",
9117+
version: "18.3.0-next-fec97ecbc-20230410",
91189118
rendererPackageName: "react-test-renderer"
91199119
};
91209120
var internals$jscomp$inline_1261 = {
@@ -9145,7 +9145,7 @@ var internals$jscomp$inline_1261 = {
91459145
scheduleRoot: null,
91469146
setRefreshHandler: null,
91479147
getCurrentFiber: null,
9148-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
9148+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
91499149
};
91509150
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
91519151
var hook$jscomp$inline_1262 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ if (
2727
}
2828
"use strict";
2929

30-
var ReactVersion = "18.3.0-next-9a9da7721-20230409";
30+
var ReactVersion = "18.3.0-next-fec97ecbc-20230410";
3131

3232
// ATTENTION
3333
// When adding new symbols to this file,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,4 +639,4 @@ exports.useSyncExternalStore = function (
639639
);
640640
};
641641
exports.useTransition = useTransition;
642-
exports.version = "18.3.0-next-9a9da7721-20230409";
642+
exports.version = "18.3.0-next-fec97ecbc-20230410";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ exports.useSyncExternalStore = function (
642642
);
643643
};
644644
exports.useTransition = useTransition;
645-
exports.version = "18.3.0-next-9a9da7721-20230409";
645+
exports.version = "18.3.0-next-fec97ecbc-20230410";
646646

647647
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
648648
if (
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9a9da7721e5b73a8af242807e463e2af842c58ee
1+
fec97ecbc4bc2e0e1407160289a8f5fac5241cbc

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactFabric-dev.fb.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22560,6 +22560,11 @@ function ensureRootIsScheduled(root) {
2256022560
// unblock additional features we have planned.
2256122561
scheduleTaskForRootDuringMicrotask(root, now$1());
2256222562
}
22563+
22564+
if (ReactCurrentActQueue$1.isBatchingLegacy && root.tag === LegacyRoot) {
22565+
// Special `act` case: Record whenever a legacy update is scheduled.
22566+
ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;
22567+
}
2256322568
}
2256422569
function flushSyncWorkOnAllRoots() {
2256522570
// This is allowed to be called synchronously, but the caller should check
@@ -23175,10 +23180,8 @@ function scheduleUpdateOnFiber(root, fiber, lane, eventTime) {
2317523180
executionContext === NoContext &&
2317623181
(fiber.mode & ConcurrentMode) === NoMode
2317723182
) {
23178-
if (ReactCurrentActQueue.isBatchingLegacy) {
23179-
// Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
23180-
ReactCurrentActQueue.didScheduleLegacyUpdate = true;
23181-
} else {
23183+
if (ReactCurrentActQueue.isBatchingLegacy);
23184+
else {
2318223185
// Flush the synchronous work now, unless we're already working or inside
2318323186
// a batch. This is intentionally inside scheduleUpdateOnFiber instead of
2318423187
// scheduleCallbackForFiber to preserve the ability to schedule a callback
@@ -27184,7 +27187,7 @@ function createFiberRoot(
2718427187
return root;
2718527188
}
2718627189

27187-
var ReactVersion = "18.3.0-next-9a9da7721-20230409";
27190+
var ReactVersion = "18.3.0-next-fec97ecbc-20230410";
2718827191

2718927192
function createPortal$1(
2719027193
children,

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactFabric-prod.fb.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9555,7 +9555,7 @@ var roots = new Map(),
95559555
devToolsConfig$jscomp$inline_1052 = {
95569556
findFiberByHostInstance: getInstanceFromNode,
95579557
bundleType: 0,
9558-
version: "18.3.0-next-9a9da7721-20230409",
9558+
version: "18.3.0-next-fec97ecbc-20230410",
95599559
rendererPackageName: "react-native-renderer",
95609560
rendererConfig: {
95619561
getInspectorDataForViewTag: function () {
@@ -9597,7 +9597,7 @@ var internals$jscomp$inline_1297 = {
95979597
scheduleRoot: null,
95989598
setRefreshHandler: null,
95999599
getCurrentFiber: null,
9600-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
9600+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
96019601
};
96029602
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
96039603
var hook$jscomp$inline_1298 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10264,7 +10264,7 @@ var roots = new Map(),
1026410264
devToolsConfig$jscomp$inline_1130 = {
1026510265
findFiberByHostInstance: getInstanceFromNode,
1026610266
bundleType: 0,
10267-
version: "18.3.0-next-9a9da7721-20230409",
10267+
version: "18.3.0-next-fec97ecbc-20230410",
1026810268
rendererPackageName: "react-native-renderer",
1026910269
rendererConfig: {
1027010270
getInspectorDataForViewTag: function () {
@@ -10319,7 +10319,7 @@ var roots = new Map(),
1031910319
scheduleRoot: null,
1032010320
setRefreshHandler: null,
1032110321
getCurrentFiber: null,
10322-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
10322+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
1032310323
});
1032410324
exports.createPortal = function (children, containerTag) {
1032510325
return createPortal$1(

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23081,6 +23081,11 @@ function ensureRootIsScheduled(root) {
2308123081
// unblock additional features we have planned.
2308223082
scheduleTaskForRootDuringMicrotask(root, now$1());
2308323083
}
23084+
23085+
if (ReactCurrentActQueue$1.isBatchingLegacy && root.tag === LegacyRoot) {
23086+
// Special `act` case: Record whenever a legacy update is scheduled.
23087+
ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;
23088+
}
2308423089
}
2308523090
function flushSyncWorkOnAllRoots() {
2308623091
// This is allowed to be called synchronously, but the caller should check
@@ -23696,10 +23701,8 @@ function scheduleUpdateOnFiber(root, fiber, lane, eventTime) {
2369623701
executionContext === NoContext &&
2369723702
(fiber.mode & ConcurrentMode) === NoMode
2369823703
) {
23699-
if (ReactCurrentActQueue.isBatchingLegacy) {
23700-
// Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
23701-
ReactCurrentActQueue.didScheduleLegacyUpdate = true;
23702-
} else {
23704+
if (ReactCurrentActQueue.isBatchingLegacy);
23705+
else {
2370323706
// Flush the synchronous work now, unless we're already working or inside
2370423707
// a batch. This is intentionally inside scheduleUpdateOnFiber instead of
2370523708
// scheduleCallbackForFiber to preserve the ability to schedule a callback
@@ -27705,7 +27708,7 @@ function createFiberRoot(
2770527708
return root;
2770627709
}
2770727710

27708-
var ReactVersion = "18.3.0-next-9a9da7721-20230409";
27711+
var ReactVersion = "18.3.0-next-fec97ecbc-20230410";
2770927712

2771027713
function createPortal$1(
2771127714
children,

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9815,7 +9815,7 @@ var roots = new Map(),
98159815
devToolsConfig$jscomp$inline_1107 = {
98169816
findFiberByHostInstance: getInstanceFromTag,
98179817
bundleType: 0,
9818-
version: "18.3.0-next-9a9da7721-20230409",
9818+
version: "18.3.0-next-fec97ecbc-20230410",
98199819
rendererPackageName: "react-native-renderer",
98209820
rendererConfig: {
98219821
getInspectorDataForViewTag: function () {
@@ -9857,7 +9857,7 @@ var internals$jscomp$inline_1359 = {
98579857
scheduleRoot: null,
98589858
setRefreshHandler: null,
98599859
getCurrentFiber: null,
9860-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
9860+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
98619861
};
98629862
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
98639863
var hook$jscomp$inline_1360 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10524,7 +10524,7 @@ var roots = new Map(),
1052410524
devToolsConfig$jscomp$inline_1185 = {
1052510525
findFiberByHostInstance: getInstanceFromTag,
1052610526
bundleType: 0,
10527-
version: "18.3.0-next-9a9da7721-20230409",
10527+
version: "18.3.0-next-fec97ecbc-20230410",
1052810528
rendererPackageName: "react-native-renderer",
1052910529
rendererConfig: {
1053010530
getInspectorDataForViewTag: function () {
@@ -10579,7 +10579,7 @@ var roots = new Map(),
1057910579
scheduleRoot: null,
1058010580
setRefreshHandler: null,
1058110581
getCurrentFiber: null,
10582-
reconcilerVersion: "18.3.0-next-9a9da7721-20230409"
10582+
reconcilerVersion: "18.3.0-next-fec97ecbc-20230410"
1058310583
});
1058410584
exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
1058510585
computeComponentStackForErrorReporting: function (reactTag) {

0 commit comments

Comments
 (0)