Skip to content

Commit 764be65

Browse files
committed
Add startGestureTransition API (#32785)
Stacked on #32783. This will replace [the `useSwipeTransition` API](#32373). Instead, of a special Hook, you can make updates to `useOptimistic` Hooks within the `startGestureTransition` scope. ``` import {unstable_startGestureTransition as startGestureTransition} from 'react'; const cancel = startGestureTransition(timeline, () => { setOptimistic(...); }, options); ``` There are some downsides to this like you can't define two directions as once and there's no "standard" direction protocol. It's instead up to libraries to come up with their own conventions (although we can suggest some). The convention is still that a gesture recognizer has two props `action` and `gesture`. The `gesture` prop is a Gesture concept which now behaves more like an Action but 1) it can't be async 2) it shouldn't have side-effects. For example you can't call `setState()` in it except on `useOptimistic` since those can be reverted if needed. The `action` is invoked with whatever side-effects you want after the gesture fulfills. This is isomorphic and not associated with a specific renderer nor root so it's a bit more complicated. To implement this I unify with the `ReactSharedInternal.T` property to contain a regular Transition or a Gesture Transition (the `gesture` field). The benefit of this unification means that every time we override this based on some scope like entering `flushSync` we also override the `startGestureTransition` scope. We just have to be careful when we read it to check the `gesture` field to know which one it is. (E.g. I error for setState / requestFormReset.) The other thing that's unique is the `cancel` return value to know when to stop the gesture. That cancellation is no longer associated with any particular Hook. It's more associated with the scope of the `startGestureTransition`. Since the schedule of whether a particular gesture has rendered or committed is associated with a root, we need to somehow associate any scheduled gestures with a root. We could track which roots we update inside the scope but instead, I went with a model where I check all the roots and see if there's a scheduled gesture matching the timeline. This means that you could "retain" a gesture across roots. Meaning this wouldn't cancel until both are cancelled: ``` const cancelA = startGestureTransition(timeline, () => { setOptimisticOnRootA(...); }, options); const cancelB = startGestureTransition(timeline, () => { setOptimisticOnRootB(...); }, options); ``` It's more like it's a global transition than associated with the roots that were updated. Optimistic updates mostly just work but I now associate them with a specific "ScheduledGesture" instance since we can only render one at a time and so if it's not the current one, we leave it for later. Clean up of optimistic updates is now lazy rather than when we cancel. Allowing the cancel closure not to have to be associated with each particular update. DiffTrain build for [b286430](b286430)
1 parent b5a2967 commit 764be65

35 files changed

+285
-154
lines changed

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d3b8ff6e589bcacfd1c9b0aa48c42fd1c93001c1
1+
b286430c8a585dc2e2e3cc023e7c455ec2b34ab7
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d3b8ff6e589bcacfd1c9b0aa48c42fd1c93001c1
1+
b286430c8a585dc2e2e3cc023e7c455ec2b34ab7

compiled/facebook-www/React-dev.classic.js

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -768,21 +768,16 @@ __DEV__ &&
768768
fnName.isPureReactComponent = !0;
769769
var isArrayImpl = Array.isArray,
770770
REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
771-
ReactSharedInternals = {
772-
H: null,
773-
A: null,
774-
T: null,
775-
S: null,
776-
V: null,
777-
actQueue: null,
778-
isBatchingLegacy: !1,
779-
didScheduleLegacyUpdate: !1,
780-
didUsePromise: !1,
781-
thrownErrors: [],
782-
getCurrentStack: null,
783-
recentlyCreatedOwnerStacks: 0
784-
},
785-
hasOwnProperty = Object.prototype.hasOwnProperty,
771+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
772+
enableViewTransition && (ReactSharedInternals.V = null);
773+
ReactSharedInternals.actQueue = null;
774+
ReactSharedInternals.isBatchingLegacy = !1;
775+
ReactSharedInternals.didScheduleLegacyUpdate = !1;
776+
ReactSharedInternals.didUsePromise = !1;
777+
ReactSharedInternals.thrownErrors = [];
778+
ReactSharedInternals.getCurrentStack = null;
779+
ReactSharedInternals.recentlyCreatedOwnerStacks = 0;
780+
var hasOwnProperty = Object.prototype.hasOwnProperty,
786781
createTask = console.createTask
787782
? console.createTask
788783
: function () {
@@ -1411,11 +1406,13 @@ __DEV__ &&
14111406
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
14121407
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
14131408
exports.unstable_addTransitionType = function (type) {
1414-
var pendingTransitionTypes = ReactSharedInternals.V;
1415-
null === pendingTransitionTypes
1416-
? (ReactSharedInternals.V = [type])
1417-
: -1 === pendingTransitionTypes.indexOf(type) &&
1418-
pendingTransitionTypes.push(type);
1409+
if (enableViewTransition) {
1410+
var pendingTransitionTypes = ReactSharedInternals.V;
1411+
null === pendingTransitionTypes
1412+
? (ReactSharedInternals.V = [type])
1413+
: -1 === pendingTransitionTypes.indexOf(type) &&
1414+
pendingTransitionTypes.push(type);
1415+
}
14191416
};
14201417
exports.unstable_getCacheForType = function (resourceType) {
14211418
var dispatcher = ReactSharedInternals.A;
@@ -1510,7 +1507,7 @@ __DEV__ &&
15101507
exports.useTransition = function () {
15111508
return resolveDispatcher().useTransition();
15121509
};
1513-
exports.version = "19.2.0-www-classic-d3b8ff6e-20250331";
1510+
exports.version = "19.2.0-www-classic-b286430c-20250331";
15141511
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
15151512
"function" ===
15161513
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-dev.modern.js

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -768,21 +768,16 @@ __DEV__ &&
768768
fnName.isPureReactComponent = !0;
769769
var isArrayImpl = Array.isArray,
770770
REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
771-
ReactSharedInternals = {
772-
H: null,
773-
A: null,
774-
T: null,
775-
S: null,
776-
V: null,
777-
actQueue: null,
778-
isBatchingLegacy: !1,
779-
didScheduleLegacyUpdate: !1,
780-
didUsePromise: !1,
781-
thrownErrors: [],
782-
getCurrentStack: null,
783-
recentlyCreatedOwnerStacks: 0
784-
},
785-
hasOwnProperty = Object.prototype.hasOwnProperty,
771+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
772+
enableViewTransition && (ReactSharedInternals.V = null);
773+
ReactSharedInternals.actQueue = null;
774+
ReactSharedInternals.isBatchingLegacy = !1;
775+
ReactSharedInternals.didScheduleLegacyUpdate = !1;
776+
ReactSharedInternals.didUsePromise = !1;
777+
ReactSharedInternals.thrownErrors = [];
778+
ReactSharedInternals.getCurrentStack = null;
779+
ReactSharedInternals.recentlyCreatedOwnerStacks = 0;
780+
var hasOwnProperty = Object.prototype.hasOwnProperty,
786781
createTask = console.createTask
787782
? console.createTask
788783
: function () {
@@ -1411,11 +1406,13 @@ __DEV__ &&
14111406
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
14121407
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
14131408
exports.unstable_addTransitionType = function (type) {
1414-
var pendingTransitionTypes = ReactSharedInternals.V;
1415-
null === pendingTransitionTypes
1416-
? (ReactSharedInternals.V = [type])
1417-
: -1 === pendingTransitionTypes.indexOf(type) &&
1418-
pendingTransitionTypes.push(type);
1409+
if (enableViewTransition) {
1410+
var pendingTransitionTypes = ReactSharedInternals.V;
1411+
null === pendingTransitionTypes
1412+
? (ReactSharedInternals.V = [type])
1413+
: -1 === pendingTransitionTypes.indexOf(type) &&
1414+
pendingTransitionTypes.push(type);
1415+
}
14191416
};
14201417
exports.unstable_getCacheForType = function (resourceType) {
14211418
var dispatcher = ReactSharedInternals.A;
@@ -1510,7 +1507,7 @@ __DEV__ &&
15101507
exports.useTransition = function () {
15111508
return resolveDispatcher().useTransition();
15121509
};
1513-
exports.version = "19.2.0-www-modern-d3b8ff6e-20250331";
1510+
exports.version = "19.2.0-www-modern-b286430c-20250331";
15141511
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
15151512
"function" ===
15161513
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-prod.classic.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var dynamicFeatureFlags = require("ReactFeatureFlags"),
1717
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1818
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1919
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
20+
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
2021
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2122
REACT_ELEMENT_TYPE = renameElementSymbol
2223
? Symbol.for("react.transitional.element")
@@ -90,8 +91,9 @@ pureComponentPrototype.constructor = PureComponent;
9091
assign(pureComponentPrototype, Component.prototype);
9192
pureComponentPrototype.isPureReactComponent = !0;
9293
var isArrayImpl = Array.isArray,
93-
ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },
94-
hasOwnProperty = Object.prototype.hasOwnProperty;
94+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
95+
enableViewTransition && (ReactSharedInternals.V = null);
96+
var hasOwnProperty = Object.prototype.hasOwnProperty;
9597
function ReactElement(type, key, self, source, owner, props) {
9698
self = props.ref;
9799
return {
@@ -549,11 +551,13 @@ exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
549551
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
550552
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
551553
exports.unstable_addTransitionType = function (type) {
552-
var pendingTransitionTypes = ReactSharedInternals.V;
553-
null === pendingTransitionTypes
554-
? (ReactSharedInternals.V = [type])
555-
: -1 === pendingTransitionTypes.indexOf(type) &&
556-
pendingTransitionTypes.push(type);
554+
if (enableViewTransition) {
555+
var pendingTransitionTypes = ReactSharedInternals.V;
556+
null === pendingTransitionTypes
557+
? (ReactSharedInternals.V = [type])
558+
: -1 === pendingTransitionTypes.indexOf(type) &&
559+
pendingTransitionTypes.push(type);
560+
}
557561
};
558562
exports.unstable_getCacheForType = function (resourceType) {
559563
var dispatcher = ReactSharedInternals.A;
@@ -623,4 +627,4 @@ exports.useSyncExternalStore = function (
623627
exports.useTransition = function () {
624628
return ReactSharedInternals.H.useTransition();
625629
};
626-
exports.version = "19.2.0-www-classic-d3b8ff6e-20250331";
630+
exports.version = "19.2.0-www-classic-b286430c-20250331";

compiled/facebook-www/React-prod.modern.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var dynamicFeatureFlags = require("ReactFeatureFlags"),
1717
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1818
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1919
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
20+
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
2021
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2122
REACT_ELEMENT_TYPE = renameElementSymbol
2223
? Symbol.for("react.transitional.element")
@@ -90,8 +91,9 @@ pureComponentPrototype.constructor = PureComponent;
9091
assign(pureComponentPrototype, Component.prototype);
9192
pureComponentPrototype.isPureReactComponent = !0;
9293
var isArrayImpl = Array.isArray,
93-
ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },
94-
hasOwnProperty = Object.prototype.hasOwnProperty;
94+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
95+
enableViewTransition && (ReactSharedInternals.V = null);
96+
var hasOwnProperty = Object.prototype.hasOwnProperty;
9597
function ReactElement(type, key, self, source, owner, props) {
9698
self = props.ref;
9799
return {
@@ -549,11 +551,13 @@ exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
549551
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
550552
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
551553
exports.unstable_addTransitionType = function (type) {
552-
var pendingTransitionTypes = ReactSharedInternals.V;
553-
null === pendingTransitionTypes
554-
? (ReactSharedInternals.V = [type])
555-
: -1 === pendingTransitionTypes.indexOf(type) &&
556-
pendingTransitionTypes.push(type);
554+
if (enableViewTransition) {
555+
var pendingTransitionTypes = ReactSharedInternals.V;
556+
null === pendingTransitionTypes
557+
? (ReactSharedInternals.V = [type])
558+
: -1 === pendingTransitionTypes.indexOf(type) &&
559+
pendingTransitionTypes.push(type);
560+
}
557561
};
558562
exports.unstable_getCacheForType = function (resourceType) {
559563
var dispatcher = ReactSharedInternals.A;
@@ -623,4 +627,4 @@ exports.useSyncExternalStore = function (
623627
exports.useTransition = function () {
624628
return ReactSharedInternals.H.useTransition();
625629
};
626-
exports.version = "19.2.0-www-modern-d3b8ff6e-20250331";
630+
exports.version = "19.2.0-www-modern-b286430c-20250331";

compiled/facebook-www/React-profiling.classic.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var dynamicFeatureFlags = require("ReactFeatureFlags"),
2121
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
2222
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2323
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
24+
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
2425
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2526
REACT_ELEMENT_TYPE = renameElementSymbol
2627
? Symbol.for("react.transitional.element")
@@ -94,8 +95,9 @@ pureComponentPrototype.constructor = PureComponent;
9495
assign(pureComponentPrototype, Component.prototype);
9596
pureComponentPrototype.isPureReactComponent = !0;
9697
var isArrayImpl = Array.isArray,
97-
ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },
98-
hasOwnProperty = Object.prototype.hasOwnProperty;
98+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
99+
enableViewTransition && (ReactSharedInternals.V = null);
100+
var hasOwnProperty = Object.prototype.hasOwnProperty;
99101
function ReactElement(type, key, self, source, owner, props) {
100102
self = props.ref;
101103
return {
@@ -553,11 +555,13 @@ exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
553555
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
554556
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
555557
exports.unstable_addTransitionType = function (type) {
556-
var pendingTransitionTypes = ReactSharedInternals.V;
557-
null === pendingTransitionTypes
558-
? (ReactSharedInternals.V = [type])
559-
: -1 === pendingTransitionTypes.indexOf(type) &&
560-
pendingTransitionTypes.push(type);
558+
if (enableViewTransition) {
559+
var pendingTransitionTypes = ReactSharedInternals.V;
560+
null === pendingTransitionTypes
561+
? (ReactSharedInternals.V = [type])
562+
: -1 === pendingTransitionTypes.indexOf(type) &&
563+
pendingTransitionTypes.push(type);
564+
}
561565
};
562566
exports.unstable_getCacheForType = function (resourceType) {
563567
var dispatcher = ReactSharedInternals.A;
@@ -627,7 +631,7 @@ exports.useSyncExternalStore = function (
627631
exports.useTransition = function () {
628632
return ReactSharedInternals.H.useTransition();
629633
};
630-
exports.version = "19.2.0-www-classic-d3b8ff6e-20250331";
634+
exports.version = "19.2.0-www-classic-b286430c-20250331";
631635
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
632636
"function" ===
633637
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-profiling.modern.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var dynamicFeatureFlags = require("ReactFeatureFlags"),
2121
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
2222
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2323
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
24+
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
2425
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2526
REACT_ELEMENT_TYPE = renameElementSymbol
2627
? Symbol.for("react.transitional.element")
@@ -94,8 +95,9 @@ pureComponentPrototype.constructor = PureComponent;
9495
assign(pureComponentPrototype, Component.prototype);
9596
pureComponentPrototype.isPureReactComponent = !0;
9697
var isArrayImpl = Array.isArray,
97-
ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },
98-
hasOwnProperty = Object.prototype.hasOwnProperty;
98+
ReactSharedInternals = { H: null, A: null, T: null, S: null };
99+
enableViewTransition && (ReactSharedInternals.V = null);
100+
var hasOwnProperty = Object.prototype.hasOwnProperty;
99101
function ReactElement(type, key, self, source, owner, props) {
100102
self = props.ref;
101103
return {
@@ -553,11 +555,13 @@ exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
553555
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
554556
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
555557
exports.unstable_addTransitionType = function (type) {
556-
var pendingTransitionTypes = ReactSharedInternals.V;
557-
null === pendingTransitionTypes
558-
? (ReactSharedInternals.V = [type])
559-
: -1 === pendingTransitionTypes.indexOf(type) &&
560-
pendingTransitionTypes.push(type);
558+
if (enableViewTransition) {
559+
var pendingTransitionTypes = ReactSharedInternals.V;
560+
null === pendingTransitionTypes
561+
? (ReactSharedInternals.V = [type])
562+
: -1 === pendingTransitionTypes.indexOf(type) &&
563+
pendingTransitionTypes.push(type);
564+
}
561565
};
562566
exports.unstable_getCacheForType = function (resourceType) {
563567
var dispatcher = ReactSharedInternals.A;
@@ -627,7 +631,7 @@ exports.useSyncExternalStore = function (
627631
exports.useTransition = function () {
628632
return ReactSharedInternals.H.useTransition();
629633
};
630-
exports.version = "19.2.0-www-modern-d3b8ff6e-20250331";
634+
exports.version = "19.2.0-www-modern-b286430c-20250331";
631635
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
632636
"function" ===
633637
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/ReactART-dev.classic.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5037,6 +5037,7 @@ __DEV__ &&
50375037
{
50385038
lane: 0,
50395039
revertLane: 0,
5040+
gesture: null,
50405041
action: update.action,
50415042
hasEagerState: update.hasEagerState,
50425043
eagerState: update.eagerState,
@@ -5053,6 +5054,7 @@ __DEV__ &&
50535054
(updateLane = {
50545055
lane: 0,
50555056
revertLane: update.revertLane,
5057+
gesture: null,
50565058
action: update.action,
50575059
hasEagerState: update.hasEagerState,
50585060
eagerState: update.eagerState,
@@ -5074,6 +5076,7 @@ __DEV__ &&
50745076
(revertLane = {
50755077
lane: updateLane,
50765078
revertLane: update.revertLane,
5079+
gesture: update.gesture,
50775080
action: update.action,
50785081
hasEagerState: update.hasEagerState,
50795082
eagerState: update.eagerState,
@@ -5945,6 +5948,7 @@ __DEV__ &&
59455948
var update = {
59465949
lane: args,
59475950
revertLane: 0,
5951+
gesture: null,
59485952
action: action,
59495953
hasEagerState: !1,
59505954
eagerState: null,
@@ -5974,6 +5978,7 @@ __DEV__ &&
59745978
var update = {
59755979
lane: lane,
59765980
revertLane: 0,
5981+
gesture: null,
59775982
action: action,
59785983
hasEagerState: !1,
59795984
eagerState: null,
@@ -6030,6 +6035,7 @@ __DEV__ &&
60306035
action = {
60316036
lane: 2,
60326037
revertLane: requestTransitionLane(),
6038+
gesture: null,
60336039
action: action,
60346040
hasEagerState: !1,
60356041
eagerState: null,
@@ -18212,10 +18218,10 @@ __DEV__ &&
1821218218
(function () {
1821318219
var internals = {
1821418220
bundleType: 1,
18215-
version: "19.2.0-www-classic-d3b8ff6e-20250331",
18221+
version: "19.2.0-www-classic-b286430c-20250331",
1821618222
rendererPackageName: "react-art",
1821718223
currentDispatcherRef: ReactSharedInternals,
18218-
reconcilerVersion: "19.2.0-www-classic-d3b8ff6e-20250331"
18224+
reconcilerVersion: "19.2.0-www-classic-b286430c-20250331"
1821918225
};
1822018226
internals.overrideHookState = overrideHookState;
1822118227
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -18249,7 +18255,7 @@ __DEV__ &&
1824918255
exports.Shape = Shape;
1825018256
exports.Surface = Surface;
1825118257
exports.Text = Text;
18252-
exports.version = "19.2.0-www-classic-d3b8ff6e-20250331";
18258+
exports.version = "19.2.0-www-classic-b286430c-20250331";
1825318259
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
1825418260
"function" ===
1825518261
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

0 commit comments

Comments
 (0)