Skip to content

Commit 425dc7d

Browse files
committed
Ensure useState and useReducer initializer functions are double invoked in StrictMode (#28248)
DiffTrain build for commit 97fd3e7.
1 parent 7d75944 commit 425dc7d

File tree

13 files changed

+142
-58
lines changed

13 files changed

+142
-58
lines changed

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<37663b716b538adcc88b05fc968e0638>>
10+
* @generated SignedSource<<9f26c06d9827c84f3688ced85cc3f175>>
1111
*/
1212

1313
"use strict";
@@ -7717,6 +7717,12 @@ if (__DEV__) {
77177717

77187718
if (init !== undefined) {
77197719
initialState = init(initialArg);
7720+
7721+
if (shouldDoubleInvokeUserFnsInHooksDEV) {
7722+
setIsStrictModeForDevtools(true);
7723+
init(initialArg);
7724+
setIsStrictModeForDevtools(false);
7725+
}
77207726
} else {
77217727
initialState = initialArg;
77227728
}
@@ -8266,8 +8272,16 @@ if (__DEV__) {
82668272
var hook = mountWorkInProgressHook();
82678273

82688274
if (typeof initialState === "function") {
8269-
// $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
8270-
initialState = initialState();
8275+
var initialStateInitializer = initialState; // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
8276+
8277+
initialState = initialStateInitializer();
8278+
8279+
if (shouldDoubleInvokeUserFnsInHooksDEV) {
8280+
setIsStrictModeForDevtools(true); // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
8281+
8282+
initialStateInitializer();
8283+
setIsStrictModeForDevtools(false);
8284+
}
82718285
}
82728286

82738287
hook.memoizedState = hook.baseState = initialState;
@@ -25711,7 +25725,7 @@ if (__DEV__) {
2571125725
return root;
2571225726
}
2571325727

25714-
var ReactVersion = "18.3.0-canary-08d6cef46-20240206";
25728+
var ReactVersion = "18.3.0-canary-97fd3e706-20240206";
2571525729

2571625730
// Might add PROFILE later.
2571725731

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<d9636c72045c34ee5d5bc57f2f84aa96>>
10+
* @generated SignedSource<<379c4788c6c39f07c9097d9bf684b088>>
1111
*/
1212

1313
"use strict";
@@ -2695,7 +2695,11 @@ function forceStoreRerender(fiber) {
26952695
}
26962696
function mountStateImpl(initialState) {
26972697
var hook = mountWorkInProgressHook();
2698-
"function" === typeof initialState && (initialState = initialState());
2698+
if ("function" === typeof initialState) {
2699+
var initialStateInitializer = initialState;
2700+
initialState = initialStateInitializer();
2701+
shouldDoubleInvokeUserFnsInHooksDEV && initialStateInitializer();
2702+
}
26992703
hook.memoizedState = hook.baseState = initialState;
27002704
hook.queue = {
27012705
pending: null,
@@ -3142,14 +3146,17 @@ var HooksDispatcherOnMount = {
31423146
},
31433147
useReducer: function (reducer, initialArg, init) {
31443148
var hook = mountWorkInProgressHook();
3145-
initialArg = void 0 !== init ? init(initialArg) : initialArg;
3146-
hook.memoizedState = hook.baseState = initialArg;
3149+
if (void 0 !== init) {
3150+
var initialState = init(initialArg);
3151+
shouldDoubleInvokeUserFnsInHooksDEV && init(initialArg);
3152+
} else initialState = initialArg;
3153+
hook.memoizedState = hook.baseState = initialState;
31473154
reducer = {
31483155
pending: null,
31493156
lanes: 0,
31503157
dispatch: null,
31513158
lastRenderedReducer: reducer,
3152-
lastRenderedState: initialArg
3159+
lastRenderedState: initialState
31533160
};
31543161
hook.queue = reducer;
31553162
reducer = reducer.dispatch = dispatchReducerAction.bind(
@@ -9150,7 +9157,7 @@ var devToolsConfig$jscomp$inline_1012 = {
91509157
throw Error("TestRenderer does not support findFiberByHostInstance()");
91519158
},
91529159
bundleType: 0,
9153-
version: "18.3.0-canary-08d6cef46-20240206",
9160+
version: "18.3.0-canary-97fd3e706-20240206",
91549161
rendererPackageName: "react-test-renderer"
91559162
};
91569163
var internals$jscomp$inline_1190 = {
@@ -9181,7 +9188,7 @@ var internals$jscomp$inline_1190 = {
91819188
scheduleRoot: null,
91829189
setRefreshHandler: null,
91839190
getCurrentFiber: null,
9184-
reconcilerVersion: "18.3.0-canary-08d6cef46-20240206"
9191+
reconcilerVersion: "18.3.0-canary-97fd3e706-20240206"
91859192
};
91869193
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
91879194
var hook$jscomp$inline_1191 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

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

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

1313
"use strict";
@@ -2715,7 +2715,11 @@ function forceStoreRerender(fiber) {
27152715
}
27162716
function mountStateImpl(initialState) {
27172717
var hook = mountWorkInProgressHook();
2718-
"function" === typeof initialState && (initialState = initialState());
2718+
if ("function" === typeof initialState) {
2719+
var initialStateInitializer = initialState;
2720+
initialState = initialStateInitializer();
2721+
shouldDoubleInvokeUserFnsInHooksDEV && initialStateInitializer();
2722+
}
27192723
hook.memoizedState = hook.baseState = initialState;
27202724
hook.queue = {
27212725
pending: null,
@@ -3162,14 +3166,17 @@ var HooksDispatcherOnMount = {
31623166
},
31633167
useReducer: function (reducer, initialArg, init) {
31643168
var hook = mountWorkInProgressHook();
3165-
initialArg = void 0 !== init ? init(initialArg) : initialArg;
3166-
hook.memoizedState = hook.baseState = initialArg;
3169+
if (void 0 !== init) {
3170+
var initialState = init(initialArg);
3171+
shouldDoubleInvokeUserFnsInHooksDEV && init(initialArg);
3172+
} else initialState = initialArg;
3173+
hook.memoizedState = hook.baseState = initialState;
31673174
reducer = {
31683175
pending: null,
31693176
lanes: 0,
31703177
dispatch: null,
31713178
lastRenderedReducer: reducer,
3172-
lastRenderedState: initialArg
3179+
lastRenderedState: initialState
31733180
};
31743181
hook.queue = reducer;
31753182
reducer = reducer.dispatch = dispatchReducerAction.bind(
@@ -9578,7 +9585,7 @@ var devToolsConfig$jscomp$inline_1054 = {
95789585
throw Error("TestRenderer does not support findFiberByHostInstance()");
95799586
},
95809587
bundleType: 0,
9581-
version: "18.3.0-canary-08d6cef46-20240206",
9588+
version: "18.3.0-canary-97fd3e706-20240206",
95829589
rendererPackageName: "react-test-renderer"
95839590
};
95849591
var internals$jscomp$inline_1231 = {
@@ -9609,7 +9616,7 @@ var internals$jscomp$inline_1231 = {
96099616
scheduleRoot: null,
96109617
setRefreshHandler: null,
96119618
getCurrentFiber: null,
9612-
reconcilerVersion: "18.3.0-canary-08d6cef46-20240206"
9619+
reconcilerVersion: "18.3.0-canary-97fd3e706-20240206"
96139620
};
96149621
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
96159622
var hook$jscomp$inline_1232 = __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
@@ -24,7 +24,7 @@ if (__DEV__) {
2424
) {
2525
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
2626
}
27-
var ReactVersion = "18.3.0-canary-08d6cef46-20240206";
27+
var ReactVersion = "18.3.0-canary-97fd3e706-20240206";
2828

2929
// ATTENTION
3030
// 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
@@ -543,4 +543,4 @@ exports.useSyncExternalStore = function (
543543
exports.useTransition = function () {
544544
return ReactCurrentDispatcher.current.useTransition();
545545
};
546-
exports.version = "18.3.0-canary-08d6cef46-20240206";
546+
exports.version = "18.3.0-canary-97fd3e706-20240206";

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
@@ -539,7 +539,7 @@ exports.useSyncExternalStore = function (
539539
exports.useTransition = function () {
540540
return ReactCurrentDispatcher.current.useTransition();
541541
};
542-
exports.version = "18.3.0-canary-08d6cef46-20240206";
542+
exports.version = "18.3.0-canary-97fd3e706-20240206";
543543
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
544544
"function" ===
545545
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
08d6cef46ab7310b6e8f4330e2fd23586a026a9c
1+
97fd3e7064b162f05b1bac3962ed10c6559c346c

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

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

1313
"use strict";
@@ -11367,6 +11367,12 @@ to return true:wantsResponderID| |
1136711367

1136811368
if (init !== undefined) {
1136911369
initialState = init(initialArg);
11370+
11371+
if (shouldDoubleInvokeUserFnsInHooksDEV) {
11372+
setIsStrictModeForDevtools(true);
11373+
init(initialArg);
11374+
setIsStrictModeForDevtools(false);
11375+
}
1137011376
} else {
1137111377
initialState = initialArg;
1137211378
}
@@ -11862,8 +11868,16 @@ to return true:wantsResponderID| |
1186211868
var hook = mountWorkInProgressHook();
1186311869

1186411870
if (typeof initialState === "function") {
11865-
// $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
11866-
initialState = initialState();
11871+
var initialStateInitializer = initialState; // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
11872+
11873+
initialState = initialStateInitializer();
11874+
11875+
if (shouldDoubleInvokeUserFnsInHooksDEV) {
11876+
setIsStrictModeForDevtools(true); // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types
11877+
11878+
initialStateInitializer();
11879+
setIsStrictModeForDevtools(false);
11880+
}
1186711881
}
1186811882

1186911883
hook.memoizedState = hook.baseState = initialState;
@@ -27842,7 +27856,7 @@ to return true:wantsResponderID| |
2784227856
return root;
2784327857
}
2784427858

27845-
var ReactVersion = "18.3.0-canary-bd49981d";
27859+
var ReactVersion = "18.3.0-canary-ff7bedcd";
2784627860

2784727861
function createPortal$1(
2784827862
children,

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<220e08ac3bea6618aef64c22997dbb19>>
10+
* @generated SignedSource<<323d72c9accf6b4e282ab64f1454bb9c>>
1111
*/
1212

1313
"use strict";
@@ -3951,7 +3951,11 @@ function forceStoreRerender(fiber) {
39513951
}
39523952
function mountStateImpl(initialState) {
39533953
var hook = mountWorkInProgressHook();
3954-
"function" === typeof initialState && (initialState = initialState());
3954+
if ("function" === typeof initialState) {
3955+
var initialStateInitializer = initialState;
3956+
initialState = initialStateInitializer();
3957+
shouldDoubleInvokeUserFnsInHooksDEV && initialStateInitializer();
3958+
}
39553959
hook.memoizedState = hook.baseState = initialState;
39563960
hook.queue = {
39573961
pending: null,
@@ -4240,14 +4244,17 @@ var HooksDispatcherOnMount = {
42404244
},
42414245
useReducer: function (reducer, initialArg, init) {
42424246
var hook = mountWorkInProgressHook();
4243-
initialArg = void 0 !== init ? init(initialArg) : initialArg;
4244-
hook.memoizedState = hook.baseState = initialArg;
4247+
if (void 0 !== init) {
4248+
var initialState = init(initialArg);
4249+
shouldDoubleInvokeUserFnsInHooksDEV && init(initialArg);
4250+
} else initialState = initialArg;
4251+
hook.memoizedState = hook.baseState = initialState;
42454252
reducer = {
42464253
pending: null,
42474254
lanes: 0,
42484255
dispatch: null,
42494256
lastRenderedReducer: reducer,
4250-
lastRenderedState: initialArg
4257+
lastRenderedState: initialState
42514258
};
42524259
hook.queue = reducer;
42534260
reducer = reducer.dispatch = dispatchReducerAction.bind(
@@ -9551,7 +9558,7 @@ var roots = new Map(),
95519558
devToolsConfig$jscomp$inline_1055 = {
95529559
findFiberByHostInstance: getInstanceFromNode,
95539560
bundleType: 0,
9554-
version: "18.3.0-canary-89078c3f",
9561+
version: "18.3.0-canary-e34746ba",
95559562
rendererPackageName: "react-native-renderer",
95569563
rendererConfig: {
95579564
getInspectorDataForInstance: getInspectorDataForInstance,
@@ -9594,7 +9601,7 @@ var internals$jscomp$inline_1277 = {
95949601
scheduleRoot: null,
95959602
setRefreshHandler: null,
95969603
getCurrentFiber: null,
9597-
reconcilerVersion: "18.3.0-canary-89078c3f"
9604+
reconcilerVersion: "18.3.0-canary-e34746ba"
95989605
};
95999606
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
96009607
var hook$jscomp$inline_1278 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

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

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

1313
"use strict";
@@ -4076,7 +4076,11 @@ function forceStoreRerender(fiber) {
40764076
}
40774077
function mountStateImpl(initialState) {
40784078
var hook = mountWorkInProgressHook();
4079-
"function" === typeof initialState && (initialState = initialState());
4079+
if ("function" === typeof initialState) {
4080+
var initialStateInitializer = initialState;
4081+
initialState = initialStateInitializer();
4082+
shouldDoubleInvokeUserFnsInHooksDEV && initialStateInitializer();
4083+
}
40804084
hook.memoizedState = hook.baseState = initialState;
40814085
hook.queue = {
40824086
pending: null,
@@ -4367,14 +4371,17 @@ var HooksDispatcherOnMount = {
43674371
},
43684372
useReducer: function (reducer, initialArg, init) {
43694373
var hook = mountWorkInProgressHook();
4370-
initialArg = void 0 !== init ? init(initialArg) : initialArg;
4371-
hook.memoizedState = hook.baseState = initialArg;
4374+
if (void 0 !== init) {
4375+
var initialState = init(initialArg);
4376+
shouldDoubleInvokeUserFnsInHooksDEV && init(initialArg);
4377+
} else initialState = initialArg;
4378+
hook.memoizedState = hook.baseState = initialState;
43724379
reducer = {
43734380
pending: null,
43744381
lanes: 0,
43754382
dispatch: null,
43764383
lastRenderedReducer: reducer,
4377-
lastRenderedState: initialArg
4384+
lastRenderedState: initialState
43784385
};
43794386
hook.queue = reducer;
43804387
reducer = reducer.dispatch = dispatchReducerAction.bind(
@@ -10254,7 +10261,7 @@ var roots = new Map(),
1025410261
devToolsConfig$jscomp$inline_1133 = {
1025510262
findFiberByHostInstance: getInstanceFromNode,
1025610263
bundleType: 0,
10257-
version: "18.3.0-canary-456a9bde",
10264+
version: "18.3.0-canary-56f3cd40",
1025810265
rendererPackageName: "react-native-renderer",
1025910266
rendererConfig: {
1026010267
getInspectorDataForInstance: getInspectorDataForInstance,
@@ -10310,7 +10317,7 @@ var roots = new Map(),
1031010317
scheduleRoot: null,
1031110318
setRefreshHandler: null,
1031210319
getCurrentFiber: null,
10313-
reconcilerVersion: "18.3.0-canary-456a9bde"
10320+
reconcilerVersion: "18.3.0-canary-56f3cd40"
1031410321
});
1031510322
exports.createPortal = function (children, containerTag) {
1031610323
return createPortal$1(

0 commit comments

Comments
 (0)