[eslint] Add an option to require dependencies on effect hooks (#33344)

Summary:

To prepare for automatic effect dependencies, some codebases may want to
codemod
existing useEffect calls with no deps to include an explicit undefined
second argument
in order to preserve the "run on every render" behavior. In sufficiently
large codebases,
this may require a temporary enforcement period where all effects
provide an explicit
dependencies argument.

Outside of migration, relying on a component to render can lead to real
bugs,
especially when working with memoization.

DiffTrain build for [99efc627a5](https://github.com/facebook/react/commit/99efc627a5a8cb56f50cfffee544c86c49572b6f)
This commit is contained in:
jbrown215
2025-05-23 07:16:54 -07:00
parent 556b910114
commit 9b5001edaf
27 changed files with 116 additions and 89 deletions
+1 -1
View File
@@ -1 +1 @@
19.2.0-native-fb-bfaeb4a4-20250522
19.2.0-native-fb-99efc627-20250523
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<6a7e54840da99104aecbe3dc774dad02>>
* @generated SignedSource<<ab2bd796615f8e3771982a1a2b808421>>
*/
"use strict";
@@ -404,5 +404,5 @@ __DEV__ &&
exports.useFormStatus = function () {
return resolveDispatcher().useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
})();
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<a276b11779b64c33be52914eabbdf4ca>>
* @generated SignedSource<<30e96e6b69cc25313b862edd8025a0f9>>
*/
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
exports.useFormStatus = function () {
return ReactSharedInternals.H.useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<a276b11779b64c33be52914eabbdf4ca>>
* @generated SignedSource<<30e96e6b69cc25313b862edd8025a0f9>>
*/
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
exports.useFormStatus = function () {
return ReactSharedInternals.H.useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<fdc537342a001c53a8536ffdc903fb2b>>
* @generated SignedSource<<60254862b6843e68f21a9c1043e25807>>
*/
/*
@@ -27026,11 +27026,11 @@ __DEV__ &&
};
(function () {
var isomorphicReactPackageVersion = React.version;
if ("19.2.0-native-fb-bfaeb4a4-20250522" !== isomorphicReactPackageVersion)
if ("19.2.0-native-fb-99efc627-20250523" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-dom: 19.2.0-native-fb-bfaeb4a4-20250522\nLearn more: https://react.dev/warnings/version-mismatch")
"\n - react-dom: 19.2.0-native-fb-99efc627-20250523\nLearn more: https://react.dev/warnings/version-mismatch")
);
})();
("function" === typeof Map &&
@@ -27067,10 +27067,10 @@ __DEV__ &&
!(function () {
var internals = {
bundleType: 1,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
internals.overrideHookState = overrideHookState;
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -27208,5 +27208,5 @@ __DEV__ &&
listenToAllSupportedEvents(container);
return new ReactDOMHydrationRoot(initialChildren);
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
})();
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<5ba1b6d58a5622c6473b7acb9d81f7f2>>
* @generated SignedSource<<ea0a299e99739d697302d6e2cb0ae7ad>>
*/
/*
@@ -17094,14 +17094,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
};
var isomorphicReactPackageVersion$jscomp$inline_2017 = React.version;
if (
"19.2.0-native-fb-bfaeb4a4-20250522" !==
"19.2.0-native-fb-99efc627-20250523" !==
isomorphicReactPackageVersion$jscomp$inline_2017
)
throw Error(
formatProdErrorMessage(
527,
isomorphicReactPackageVersion$jscomp$inline_2017,
"19.2.0-native-fb-bfaeb4a4-20250522"
"19.2.0-native-fb-99efc627-20250523"
)
);
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17123,10 +17123,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
};
var internals$jscomp$inline_2536 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
var hook$jscomp$inline_2537 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17224,4 +17224,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
listenToAllSupportedEvents(container);
return new ReactDOMHydrationRoot(initialChildren);
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<839aebb5962a5c0736a3655361f5ec18>>
* @generated SignedSource<<038433bb685979a48c2701de18f506cd>>
*/
/*
@@ -17804,14 +17804,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
};
var isomorphicReactPackageVersion$jscomp$inline_2120 = React.version;
if (
"19.2.0-native-fb-bfaeb4a4-20250522" !==
"19.2.0-native-fb-99efc627-20250523" !==
isomorphicReactPackageVersion$jscomp$inline_2120
)
throw Error(
formatProdErrorMessage(
527,
isomorphicReactPackageVersion$jscomp$inline_2120,
"19.2.0-native-fb-bfaeb4a4-20250522"
"19.2.0-native-fb-99efc627-20250523"
)
);
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17833,10 +17833,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
};
var internals$jscomp$inline_2127 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522",
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523",
getLaneLabelMap: function () {
for (
var map = new Map(), lane = 1, index$313 = 0;
@@ -17949,4 +17949,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
listenToAllSupportedEvents(container);
return new ReactDOMHydrationRoot(initialChildren);
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<a6c16f656f28616f5e97803923c747eb>>
* @generated SignedSource<<79f0c5586ac2947e06b7cfcb217db2d4>>
*/
/*
@@ -27082,11 +27082,11 @@ __DEV__ &&
};
(function () {
var isomorphicReactPackageVersion = React.version;
if ("19.2.0-native-fb-bfaeb4a4-20250522" !== isomorphicReactPackageVersion)
if ("19.2.0-native-fb-99efc627-20250523" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-dom: 19.2.0-native-fb-bfaeb4a4-20250522\nLearn more: https://react.dev/warnings/version-mismatch")
"\n - react-dom: 19.2.0-native-fb-99efc627-20250523\nLearn more: https://react.dev/warnings/version-mismatch")
);
})();
("function" === typeof Map &&
@@ -27123,10 +27123,10 @@ __DEV__ &&
!(function () {
var internals = {
bundleType: 1,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
internals.overrideHookState = overrideHookState;
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -27580,7 +27580,7 @@ __DEV__ &&
exports.useFormStatus = function () {
return resolveDispatcher().useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
"function" ===
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<b10e021f88454a685f1724e243f04485>>
* @generated SignedSource<<14176aa1ed1917a152945adb871d184d>>
*/
/*
@@ -17105,14 +17105,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
};
var isomorphicReactPackageVersion$jscomp$inline_2018 = React.version;
if (
"19.2.0-native-fb-bfaeb4a4-20250522" !==
"19.2.0-native-fb-99efc627-20250523" !==
isomorphicReactPackageVersion$jscomp$inline_2018
)
throw Error(
formatProdErrorMessage(
527,
isomorphicReactPackageVersion$jscomp$inline_2018,
"19.2.0-native-fb-bfaeb4a4-20250522"
"19.2.0-native-fb-99efc627-20250523"
)
);
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17134,10 +17134,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
};
var internals$jscomp$inline_2539 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
var hook$jscomp$inline_2540 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17388,4 +17388,4 @@ exports.useFormState = function (action, initialState, permalink) {
exports.useFormStatus = function () {
return ReactSharedInternals.H.useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<0f1a2bae32b228a438b8ee79fb9901cf>>
* @generated SignedSource<<1ec6d20e379e8ddfdf2a70078b8e8d99>>
*/
/*
@@ -17819,14 +17819,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
};
var isomorphicReactPackageVersion$jscomp$inline_2121 = React.version;
if (
"19.2.0-native-fb-bfaeb4a4-20250522" !==
"19.2.0-native-fb-99efc627-20250523" !==
isomorphicReactPackageVersion$jscomp$inline_2121
)
throw Error(
formatProdErrorMessage(
527,
isomorphicReactPackageVersion$jscomp$inline_2121,
"19.2.0-native-fb-bfaeb4a4-20250522"
"19.2.0-native-fb-99efc627-20250523"
)
);
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17848,10 +17848,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
};
var internals$jscomp$inline_2128 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-dom",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522",
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523",
getLaneLabelMap: function () {
for (
var map = new Map(), lane = 1, index$313 = 0;
@@ -18117,7 +18117,7 @@ exports.useFormState = function (action, initialState, permalink) {
exports.useFormStatus = function () {
return ReactSharedInternals.H.useHostTransitionStatus();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
"function" ===
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<02e1cab78c555c854700885317fdea3d>>
* @generated SignedSource<<639c8a455f45352f7325191462889a69>>
*/
"use strict";
@@ -15675,10 +15675,10 @@ __DEV__ &&
(function () {
var internals = {
bundleType: 1,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-test-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
internals.overrideHookState = overrideHookState;
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -15823,5 +15823,5 @@ __DEV__ &&
flushSyncWorkAcrossRoots_impl(0, !0));
}
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
})();
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<dbc31d5db06928069432f402000ed1e1>>
* @generated SignedSource<<d4deb003bb3db3a59fc6934a8cb22a4c>>
*/
"use strict";
@@ -9896,10 +9896,10 @@ function wrapFiber(fiber) {
}
var internals$jscomp$inline_1447 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-test-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
var hook$jscomp$inline_1448 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -10035,4 +10035,4 @@ exports.unstable_batchedUpdates = function (fn, a) {
flushSyncWorkAcrossRoots_impl(0, !0));
}
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<c1d76e6f7c117db9d85a16fa8e78751d>>
* @generated SignedSource<<de17b9b3f5ed4c86a4fbb704c684f74a>>
*/
"use strict";
@@ -10516,10 +10516,10 @@ function wrapFiber(fiber) {
}
var internals$jscomp$inline_1254 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-test-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522",
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523",
getLaneLabelMap: function () {
for (
var map = new Map(), lane = 1, index$155 = 0;
@@ -10670,4 +10670,4 @@ exports.unstable_batchedUpdates = function (fn, a) {
flushSyncWorkAcrossRoots_impl(0, !0));
}
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<31d45216409d599b29cdb21739a2a21f>>
* @generated SignedSource<<d6384dc67a951eaa09138fe64861ae6a>>
*/
"use strict";
@@ -1411,7 +1411,7 @@ __DEV__ &&
exports.useTransition = function () {
return resolveDispatcher().useTransition();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
"function" ===
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<306b7cfcb50cbc4a7cdadf99b98b8c59>>
* @generated SignedSource<<ad641042a32dd08585bc3196691aca72>>
*/
"use strict";
@@ -586,4 +586,4 @@ exports.useSyncExternalStore = function (
exports.useTransition = function () {
return ReactSharedInternals.H.useTransition();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<519a86e51868126c4f82b8d80f3a422b>>
* @generated SignedSource<<6d47b4590460ee95479531cd33caad61>>
*/
"use strict";
@@ -590,7 +590,7 @@ exports.useSyncExternalStore = function (
exports.useTransition = function () {
return ReactSharedInternals.H.useTransition();
};
exports.version = "19.2.0-native-fb-bfaeb4a4-20250522";
exports.version = "19.2.0-native-fb-99efc627-20250523";
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
"function" ===
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
@@ -1 +1 @@
bfaeb4a46175fa0f4edf2eba58349d5029e5e86e
99efc627a5a8cb56f50cfffee544c86c49572b6f
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<2f033557e02bc924d81a1ff7fd724181>>
* @generated SignedSource<<abaddd931ae179521c2b31209314ad7d>>
*/
"use strict";
@@ -17572,10 +17572,10 @@ __DEV__ &&
(function () {
var internals = {
bundleType: 1,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals.rendererConfig = extraDevToolsConfig);
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<d084bc4264414653f5663de007d0e72d>>
* @generated SignedSource<<4e624f467ac52658b004f188eba9fa72>>
*/
"use strict";
@@ -11277,10 +11277,10 @@ batchedUpdatesImpl = function (fn, a) {
var roots = new Map(),
internals$jscomp$inline_1262 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals$jscomp$inline_1262.rendererConfig = extraDevToolsConfig);
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<ece424c01d43feda5806fde556cc66be>>
* @generated SignedSource<<77cc795475b1452a5cac2238a1f296f1>>
*/
"use strict";
@@ -11981,10 +11981,10 @@ batchedUpdatesImpl = function (fn, a) {
var roots = new Map(),
internals$jscomp$inline_1363 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals$jscomp$inline_1363.rendererConfig = extraDevToolsConfig);
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<bd16f248ecb83cb1bf1282c60c4720d7>>
* @generated SignedSource<<a9880724ca4455faffc19edd5ebcc45c>>
*/
"use strict";
@@ -17626,11 +17626,11 @@ __DEV__ &&
shouldSuspendImpl = newShouldSuspendImpl;
};
var isomorphicReactPackageVersion = React.version;
if ("19.2.0-native-fb-bfaeb4a4-20250522" !== isomorphicReactPackageVersion)
if ("19.2.0-native-fb-99efc627-20250523" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-native-renderer" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-native-renderer: 19.2.0-native-fb-bfaeb4a4-20250522\nLearn more: https://react.dev/warnings/version-mismatch")
"\n - react-native-renderer: 19.2.0-native-fb-99efc627-20250523\nLearn more: https://react.dev/warnings/version-mismatch")
);
if (
"function" !==
@@ -17656,10 +17656,10 @@ __DEV__ &&
(function () {
var internals = {
bundleType: 1,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals.rendererConfig = extraDevToolsConfig);
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<9d78c8d5cd9f2eaaaac14ebf7021f35a>>
* @generated SignedSource<<ce76331a173b78b52ddf51cf75fc7e67>>
*/
"use strict";
@@ -11212,11 +11212,11 @@ function updateContainer(element, container, parentComponent, callback) {
return lane;
}
var isomorphicReactPackageVersion = React.version;
if ("19.2.0-native-fb-bfaeb4a4-20250522" !== isomorphicReactPackageVersion)
if ("19.2.0-native-fb-99efc627-20250523" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-native-renderer" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-native-renderer: 19.2.0-native-fb-bfaeb4a4-20250522\nLearn more: https://react.dev/warnings/version-mismatch")
"\n - react-native-renderer: 19.2.0-native-fb-99efc627-20250523\nLearn more: https://react.dev/warnings/version-mismatch")
);
if (
"function" !==
@@ -11266,10 +11266,10 @@ batchedUpdatesImpl = function (fn, a) {
var roots = new Map(),
internals$jscomp$inline_1307 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals$jscomp$inline_1307.rendererConfig = extraDevToolsConfig);
@@ -7,7 +7,7 @@
* @noflow
* @nolint
* @preventMunge
* @generated SignedSource<<c37f0e9608db6e9d438beddcf4824502>>
* @generated SignedSource<<6498b998f8ecbb106553ba5bd9528ab3>>
*/
"use strict";
@@ -11914,11 +11914,11 @@ function updateContainer(element, container, parentComponent, callback) {
return lane;
}
var isomorphicReactPackageVersion = React.version;
if ("19.2.0-native-fb-bfaeb4a4-20250522" !== isomorphicReactPackageVersion)
if ("19.2.0-native-fb-99efc627-20250523" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-native-renderer" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-native-renderer: 19.2.0-native-fb-bfaeb4a4-20250522\nLearn more: https://react.dev/warnings/version-mismatch")
"\n - react-native-renderer: 19.2.0-native-fb-99efc627-20250523\nLearn more: https://react.dev/warnings/version-mismatch")
);
if (
"function" !==
@@ -11968,10 +11968,10 @@ batchedUpdatesImpl = function (fn, a) {
var roots = new Map(),
internals$jscomp$inline_1408 = {
bundleType: 0,
version: "19.2.0-native-fb-bfaeb4a4-20250522",
version: "19.2.0-native-fb-99efc627-20250523",
rendererPackageName: "react-native-renderer",
currentDispatcherRef: ReactSharedInternals,
reconcilerVersion: "19.2.0-native-fb-bfaeb4a4-20250522"
reconcilerVersion: "19.2.0-native-fb-99efc627-20250523"
};
null !== extraDevToolsConfig &&
(internals$jscomp$inline_1408.rendererConfig = extraDevToolsConfig);
@@ -29,6 +29,9 @@ declare const rules: {
type: "string";
};
};
requireExplicitEffectDeps: {
type: "boolean";
};
};
}[];
};
@@ -12,7 +12,7 @@
* @lightSyntaxTransform
* @preventMunge
* @oncall react_core
* @generated SignedSource<<2e502a771e8aac9be021cd0c1a5dfd48>>
* @generated SignedSource<<d68920f0f0e721c7c5492b0b74e8875d>>
*/
'use strict';
@@ -57,6 +57,9 @@ const rule$2 = {
type: 'string',
},
},
requireExplicitEffectDeps: {
type: 'boolean',
}
},
},
],
@@ -72,10 +75,12 @@ const rule$2 = {
const experimental_autoDependenciesHooks = rawOptions && Array.isArray(rawOptions.experimental_autoDependenciesHooks)
? rawOptions.experimental_autoDependenciesHooks
: [];
const requireExplicitEffectDeps = rawOptions && rawOptions.requireExplicitEffectDeps || false;
const options = {
additionalHooks,
experimental_autoDependenciesHooks,
enableDangerousAutofixThisMayCauseInfiniteLoops,
requireExplicitEffectDeps,
};
function reportProblem(problem) {
if (enableDangerousAutofixThisMayCauseInfiniteLoops) {
@@ -935,6 +940,13 @@ const rule$2 = {
});
return;
}
if (!maybeNode && isEffect && options.requireExplicitEffectDeps) {
reportProblem({
node: reactiveHook,
message: `React Hook ${reactiveHookName} always requires dependencies. ` +
`Please add a dependency array or an explicit \`undefined\``
});
}
const isAutoDepsHook = options.experimental_autoDependenciesHooks.includes(reactiveHookName);
if ((!declaredDependenciesNode ||
(isAutoDepsHook &&
@@ -6,7 +6,7 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* @generated SignedSource<<bdd683a9d87a6bb38d73841d11543299>>
* @generated SignedSource<<889ac8117053af5c38dd22c2455642bf>>
*/
'use strict';
@@ -47,6 +47,9 @@ const rule$2 = {
type: 'string',
},
},
requireExplicitEffectDeps: {
type: 'boolean',
}
},
},
],
@@ -62,10 +65,12 @@ const rule$2 = {
const experimental_autoDependenciesHooks = rawOptions && Array.isArray(rawOptions.experimental_autoDependenciesHooks)
? rawOptions.experimental_autoDependenciesHooks
: [];
const requireExplicitEffectDeps = rawOptions && rawOptions.requireExplicitEffectDeps || false;
const options = {
additionalHooks,
experimental_autoDependenciesHooks,
enableDangerousAutofixThisMayCauseInfiniteLoops,
requireExplicitEffectDeps,
};
function reportProblem(problem) {
if (enableDangerousAutofixThisMayCauseInfiniteLoops) {
@@ -925,6 +930,13 @@ const rule$2 = {
});
return;
}
if (!maybeNode && isEffect && options.requireExplicitEffectDeps) {
reportProblem({
node: reactiveHook,
message: `React Hook ${reactiveHookName} always requires dependencies. ` +
`Please add a dependency array or an explicit \`undefined\``
});
}
const isAutoDepsHook = options.experimental_autoDependenciesHooks.includes(reactiveHookName);
if ((!declaredDependenciesNode ||
(isAutoDepsHook &&
@@ -1,7 +1,7 @@
{
"name": "eslint-plugin-react-hooks",
"description": "ESLint rules for React Hooks",
"version": "0.0.0-experimental-bfaeb4a4-20250522",
"version": "0.0.0-experimental-99efc627-20250523",
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",