Skip to content

Commit f5c6fd6

Browse files
committed
[compiler] Option to treat "set-" prefixed callees as setState functions (facebook#34505)
Calling setState functions during render can lead to extraneous renders or even infinite loops. We also have runtime detection for loops, but static detection is obviously even better. This PR adds an option to infer identifers as setState functions if both the following conditions are met: - The identifier is named starting with "set" - The identifier is used as the callee of a call expression By inferring values as SetState type, this allows our existing ValidateNoSetStateInRender rule to flag calls during render, disallowing examples like the following: ```js function Component({setParentState}) { setParentState(...); ^^^^^^^^^^^^^^ Error: Cannot call setState in render } ``` DiffTrain build for [7899729](facebook@7899729)
1 parent 483a950 commit f5c6fd6

26 files changed

Lines changed: 107 additions & 91 deletions

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-348a4e2d-20250915
1+
19.2.0-native-fb-78997291-20250916

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<<85edb701d437b9e38e5582f59019adfc>>
10+
* @generated SignedSource<<741380904353ff2ae1ee372981f76ca5>>
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-348a4e2d-20250915";
407+
exports.version = "19.2.0-native-fb-78997291-20250916";
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<<fcb57ee67fb57c6baac07f90c632e66b>>
10+
* @generated SignedSource<<860af48ec07a32951a9fd5b4bf683171>>
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-348a4e2d-20250915";
206+
exports.version = "19.2.0-native-fb-78997291-20250916";

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<<fcb57ee67fb57c6baac07f90c632e66b>>
10+
* @generated SignedSource<<860af48ec07a32951a9fd5b4bf683171>>
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-348a4e2d-20250915";
206+
exports.version = "19.2.0-native-fb-78997291-20250916";

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

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

1313
/*
@@ -29763,11 +29763,11 @@ __DEV__ &&
2976329763
};
2976429764
(function () {
2976529765
var isomorphicReactPackageVersion = React.version;
29766-
if ("19.2.0-native-fb-348a4e2d-20250915" !== isomorphicReactPackageVersion)
29766+
if ("19.2.0-native-fb-78997291-20250916" !== isomorphicReactPackageVersion)
2976729767
throw Error(
2976829768
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
2976929769
(isomorphicReactPackageVersion +
29770-
"\n - react-dom: 19.2.0-native-fb-348a4e2d-20250915\nLearn more: https://react.dev/warnings/version-mismatch")
29770+
"\n - react-dom: 19.2.0-native-fb-78997291-20250916\nLearn more: https://react.dev/warnings/version-mismatch")
2977129771
);
2977229772
})();
2977329773
("function" === typeof Map &&
@@ -29804,10 +29804,10 @@ __DEV__ &&
2980429804
!(function () {
2980529805
var internals = {
2980629806
bundleType: 1,
29807-
version: "19.2.0-native-fb-348a4e2d-20250915",
29807+
version: "19.2.0-native-fb-78997291-20250916",
2980829808
rendererPackageName: "react-dom",
2980929809
currentDispatcherRef: ReactSharedInternals,
29810-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915"
29810+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916"
2981129811
};
2981229812
internals.overrideHookState = overrideHookState;
2981329813
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -29956,5 +29956,5 @@ __DEV__ &&
2995629956
listenToAllSupportedEvents(container);
2995729957
return new ReactDOMHydrationRoot(initialChildren);
2995829958
};
29959-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
29959+
exports.version = "19.2.0-native-fb-78997291-20250916";
2996029960
})();

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

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

1313
/*
@@ -17525,14 +17525,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1752517525
};
1752617526
var isomorphicReactPackageVersion$jscomp$inline_2073 = React.version;
1752717527
if (
17528-
"19.2.0-native-fb-348a4e2d-20250915" !==
17528+
"19.2.0-native-fb-78997291-20250916" !==
1752917529
isomorphicReactPackageVersion$jscomp$inline_2073
1753017530
)
1753117531
throw Error(
1753217532
formatProdErrorMessage(
1753317533
527,
1753417534
isomorphicReactPackageVersion$jscomp$inline_2073,
17535-
"19.2.0-native-fb-348a4e2d-20250915"
17535+
"19.2.0-native-fb-78997291-20250916"
1753617536
)
1753717537
);
1753817538
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17554,10 +17554,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1755417554
};
1755517555
var internals$jscomp$inline_2646 = {
1755617556
bundleType: 0,
17557-
version: "19.2.0-native-fb-348a4e2d-20250915",
17557+
version: "19.2.0-native-fb-78997291-20250916",
1755817558
rendererPackageName: "react-dom",
1755917559
currentDispatcherRef: ReactSharedInternals,
17560-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915"
17560+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916"
1756117561
};
1756217562
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1756317563
var hook$jscomp$inline_2647 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17664,4 +17664,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1766417664
listenToAllSupportedEvents(container);
1766517665
return new ReactDOMHydrationRoot(initialChildren);
1766617666
};
17667-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
17667+
exports.version = "19.2.0-native-fb-78997291-20250916";

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

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

1313
/*
@@ -19532,14 +19532,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1953219532
};
1953319533
var isomorphicReactPackageVersion$jscomp$inline_2330 = React.version;
1953419534
if (
19535-
"19.2.0-native-fb-348a4e2d-20250915" !==
19535+
"19.2.0-native-fb-78997291-20250916" !==
1953619536
isomorphicReactPackageVersion$jscomp$inline_2330
1953719537
)
1953819538
throw Error(
1953919539
formatProdErrorMessage(
1954019540
527,
1954119541
isomorphicReactPackageVersion$jscomp$inline_2330,
19542-
"19.2.0-native-fb-348a4e2d-20250915"
19542+
"19.2.0-native-fb-78997291-20250916"
1954319543
)
1954419544
);
1954519545
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -19561,10 +19561,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1956119561
};
1956219562
var internals$jscomp$inline_2337 = {
1956319563
bundleType: 0,
19564-
version: "19.2.0-native-fb-348a4e2d-20250915",
19564+
version: "19.2.0-native-fb-78997291-20250916",
1956519565
rendererPackageName: "react-dom",
1956619566
currentDispatcherRef: ReactSharedInternals,
19567-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915",
19567+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916",
1956819568
getLaneLabelMap: function () {
1956919569
for (
1957019570
var map = new Map(), lane = 1, index$324 = 0;
@@ -19687,4 +19687,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1968719687
listenToAllSupportedEvents(container);
1968819688
return new ReactDOMHydrationRoot(initialChildren);
1968919689
};
19690-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
19690+
exports.version = "19.2.0-native-fb-78997291-20250916";

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<376bbb39a3082c15f872a2099e783811>>
10+
* @generated SignedSource<<4c6aea67c3a094d6c96690867c1f40a9>>
1111
*/
1212

1313
/*
@@ -29819,11 +29819,11 @@ __DEV__ &&
2981929819
};
2982029820
(function () {
2982129821
var isomorphicReactPackageVersion = React.version;
29822-
if ("19.2.0-native-fb-348a4e2d-20250915" !== isomorphicReactPackageVersion)
29822+
if ("19.2.0-native-fb-78997291-20250916" !== isomorphicReactPackageVersion)
2982329823
throw Error(
2982429824
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
2982529825
(isomorphicReactPackageVersion +
29826-
"\n - react-dom: 19.2.0-native-fb-348a4e2d-20250915\nLearn more: https://react.dev/warnings/version-mismatch")
29826+
"\n - react-dom: 19.2.0-native-fb-78997291-20250916\nLearn more: https://react.dev/warnings/version-mismatch")
2982729827
);
2982829828
})();
2982929829
("function" === typeof Map &&
@@ -29860,10 +29860,10 @@ __DEV__ &&
2986029860
!(function () {
2986129861
var internals = {
2986229862
bundleType: 1,
29863-
version: "19.2.0-native-fb-348a4e2d-20250915",
29863+
version: "19.2.0-native-fb-78997291-20250916",
2986429864
rendererPackageName: "react-dom",
2986529865
currentDispatcherRef: ReactSharedInternals,
29866-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915"
29866+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916"
2986729867
};
2986829868
internals.overrideHookState = overrideHookState;
2986929869
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -30328,7 +30328,7 @@ __DEV__ &&
3032830328
exports.useFormStatus = function () {
3032930329
return resolveDispatcher().useHostTransitionStatus();
3033030330
};
30331-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
30331+
exports.version = "19.2.0-native-fb-78997291-20250916";
3033230332
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
3033330333
"function" ===
3033430334
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

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

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

1313
/*
@@ -17536,14 +17536,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1753617536
};
1753717537
var isomorphicReactPackageVersion$jscomp$inline_2074 = React.version;
1753817538
if (
17539-
"19.2.0-native-fb-348a4e2d-20250915" !==
17539+
"19.2.0-native-fb-78997291-20250916" !==
1754017540
isomorphicReactPackageVersion$jscomp$inline_2074
1754117541
)
1754217542
throw Error(
1754317543
formatProdErrorMessage(
1754417544
527,
1754517545
isomorphicReactPackageVersion$jscomp$inline_2074,
17546-
"19.2.0-native-fb-348a4e2d-20250915"
17546+
"19.2.0-native-fb-78997291-20250916"
1754717547
)
1754817548
);
1754917549
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17565,10 +17565,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1756517565
};
1756617566
var internals$jscomp$inline_2649 = {
1756717567
bundleType: 0,
17568-
version: "19.2.0-native-fb-348a4e2d-20250915",
17568+
version: "19.2.0-native-fb-78997291-20250916",
1756917569
rendererPackageName: "react-dom",
1757017570
currentDispatcherRef: ReactSharedInternals,
17571-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915"
17571+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916"
1757217572
};
1757317573
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1757417574
var hook$jscomp$inline_2650 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17828,4 +17828,4 @@ exports.useFormState = function (action, initialState, permalink) {
1782817828
exports.useFormStatus = function () {
1782917829
return ReactSharedInternals.H.useHostTransitionStatus();
1783017830
};
17831-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
17831+
exports.version = "19.2.0-native-fb-78997291-20250916";

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<545191caa1428f447ea38838c1393e23>>
10+
* @generated SignedSource<<30f3dd6e1b2bcafc194c5bad1db3dc5b>>
1111
*/
1212

1313
/*
@@ -19547,14 +19547,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1954719547
};
1954819548
var isomorphicReactPackageVersion$jscomp$inline_2331 = React.version;
1954919549
if (
19550-
"19.2.0-native-fb-348a4e2d-20250915" !==
19550+
"19.2.0-native-fb-78997291-20250916" !==
1955119551
isomorphicReactPackageVersion$jscomp$inline_2331
1955219552
)
1955319553
throw Error(
1955419554
formatProdErrorMessage(
1955519555
527,
1955619556
isomorphicReactPackageVersion$jscomp$inline_2331,
19557-
"19.2.0-native-fb-348a4e2d-20250915"
19557+
"19.2.0-native-fb-78997291-20250916"
1955819558
)
1955919559
);
1956019560
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -19576,10 +19576,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1957619576
};
1957719577
var internals$jscomp$inline_2338 = {
1957819578
bundleType: 0,
19579-
version: "19.2.0-native-fb-348a4e2d-20250915",
19579+
version: "19.2.0-native-fb-78997291-20250916",
1958019580
rendererPackageName: "react-dom",
1958119581
currentDispatcherRef: ReactSharedInternals,
19582-
reconcilerVersion: "19.2.0-native-fb-348a4e2d-20250915",
19582+
reconcilerVersion: "19.2.0-native-fb-78997291-20250916",
1958319583
getLaneLabelMap: function () {
1958419584
for (
1958519585
var map = new Map(), lane = 1, index$324 = 0;
@@ -19855,7 +19855,7 @@ exports.useFormState = function (action, initialState, permalink) {
1985519855
exports.useFormStatus = function () {
1985619856
return ReactSharedInternals.H.useHostTransitionStatus();
1985719857
};
19858-
exports.version = "19.2.0-native-fb-348a4e2d-20250915";
19858+
exports.version = "19.2.0-native-fb-78997291-20250916";
1985919859
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
1986019860
"function" ===
1986119861
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

0 commit comments

Comments
 (0)