From 52f3da8ae6bb5765feba345ec4d8245ceb4cb33d Mon Sep 17 00:00:00 2001 From: acdlite Date: Mon, 23 Oct 2023 21:56:58 +0000 Subject: [PATCH] Bugfix: useFormState queues actions in wrong order (#27570) I neglected to update the "last" pointer of the action queue. Since the queue is circular, rather than dropping the update, the effect was to add the update to the front of the queue instead of the back. I didn't notice earlier because in my demos/tests, the actions would either resolve really quickly or the actions weren't order dependent (like incrementing a counter). DiffTrain build for commit https://github.com/facebook/react/commit/b8e47d988eb3ba547c102c0b12c351250ed955e0. --- .../react-test-renderer/cjs/ReactTestRenderer-dev.js | 6 +++--- .../react-test-renderer/cjs/ReactTestRenderer-prod.js | 9 +++++---- .../cjs/ReactTestRenderer-profiling.js | 9 +++++---- .../xplat/js/RKJSModules/vendor/react/cjs/React-dev.js | 2 +- .../xplat/js/RKJSModules/vendor/react/cjs/React-prod.js | 2 +- .../js/RKJSModules/vendor/react/cjs/React-profiling.js | 2 +- .../js/react-native-github/Libraries/Renderer/REVISION | 2 +- 7 files changed, 17 insertions(+), 15 deletions(-) diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-dev.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-dev.js index 95872d4a55..45b5de59c6 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-dev.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-dev.js @@ -7,7 +7,7 @@ * @noflow * @nolint * @preventMunge - * @generated SignedSource<<4aba8405b48af51650328aaea1ae0e6d>> + * @generated SignedSource<> */ 'use strict'; @@ -8054,7 +8054,7 @@ function dispatchFormState(fiber, actionQueue, setState, payload) { payload: payload, next: first }; - last.next = _newLast; + actionQueue.pending = last.next = _newLast; } } @@ -24887,7 +24887,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-canary-05fbd1aab-20231023"; +var ReactVersion = "18.3.0-canary-b8e47d988-20231023"; // Might add PROFILE later. diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-prod.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-prod.js index ccc7b5b362..f3a8f5ea13 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-prod.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-prod.js @@ -7,7 +7,7 @@ * @noflow * @nolint * @preventMunge - * @generated SignedSource<> + * @generated SignedSource<<3c60c6d80dc890b93e2083f2bdb9724f>> */ "use strict"; @@ -2694,7 +2694,8 @@ function dispatchFormState(fiber, actionQueue, setState, payload) { ? ((fiber = { payload: payload, next: null }), (fiber.next = actionQueue.pending = fiber), runFormStateAction(actionQueue, setState, payload)) - : (fiber.next = { payload: payload, next: fiber.next }); + : (actionQueue.pending = fiber.next = + { payload: payload, next: fiber.next }); } function runFormStateAction(actionQueue, setState, payload) { var action = actionQueue.action, @@ -9024,7 +9025,7 @@ var devToolsConfig$jscomp$inline_1032 = { throw Error("TestRenderer does not support findFiberByHostInstance()"); }, bundleType: 0, - version: "18.3.0-canary-05fbd1aab-20231023", + version: "18.3.0-canary-b8e47d988-20231023", rendererPackageName: "react-test-renderer" }; var internals$jscomp$inline_1225 = { @@ -9055,7 +9056,7 @@ var internals$jscomp$inline_1225 = { scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-canary-05fbd1aab-20231023" + reconcilerVersion: "18.3.0-canary-b8e47d988-20231023" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_1226 = __REACT_DEVTOOLS_GLOBAL_HOOK__; diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-profiling.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-profiling.js index 81815f89cb..8ba63a6383 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-profiling.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react-test-renderer/cjs/ReactTestRenderer-profiling.js @@ -7,7 +7,7 @@ * @noflow * @nolint * @preventMunge - * @generated SignedSource<<55d6fdb51293e0bfc3d0f87e833cd9af>> + * @generated SignedSource<> */ "use strict"; @@ -2714,7 +2714,8 @@ function dispatchFormState(fiber, actionQueue, setState, payload) { ? ((fiber = { payload: payload, next: null }), (fiber.next = actionQueue.pending = fiber), runFormStateAction(actionQueue, setState, payload)) - : (fiber.next = { payload: payload, next: fiber.next }); + : (actionQueue.pending = fiber.next = + { payload: payload, next: fiber.next }); } function runFormStateAction(actionQueue, setState, payload) { var action = actionQueue.action, @@ -9450,7 +9451,7 @@ var devToolsConfig$jscomp$inline_1074 = { throw Error("TestRenderer does not support findFiberByHostInstance()"); }, bundleType: 0, - version: "18.3.0-canary-05fbd1aab-20231023", + version: "18.3.0-canary-b8e47d988-20231023", rendererPackageName: "react-test-renderer" }; var internals$jscomp$inline_1266 = { @@ -9481,7 +9482,7 @@ var internals$jscomp$inline_1266 = { scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-canary-05fbd1aab-20231023" + reconcilerVersion: "18.3.0-canary-b8e47d988-20231023" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_1267 = __REACT_DEVTOOLS_GLOBAL_HOOK__; diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-dev.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-dev.js index 9c6e57f798..c01e79ce24 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-dev.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-dev.js @@ -27,7 +27,7 @@ if ( } "use strict"; -var ReactVersion = "18.3.0-canary-05fbd1aab-20231023"; +var ReactVersion = "18.3.0-canary-b8e47d988-20231023"; // ATTENTION // When adding new symbols to this file, diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-prod.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-prod.js index be4e79c2d8..49680907dc 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-prod.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-prod.js @@ -580,4 +580,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactCurrentDispatcher.current.useTransition(); }; -exports.version = "18.3.0-canary-05fbd1aab-20231023"; +exports.version = "18.3.0-canary-b8e47d988-20231023"; diff --git a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-profiling.js b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-profiling.js index 1eac55e086..833745d4cf 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-profiling.js +++ b/compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/cjs/React-profiling.js @@ -583,7 +583,7 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactCurrentDispatcher.current.useTransition(); }; -exports.version = "18.3.0-canary-05fbd1aab-20231023"; +exports.version = "18.3.0-canary-b8e47d988-20231023"; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( diff --git a/compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION b/compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION index c4f8883032..3ce17a86bf 100644 --- a/compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION +++ b/compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION @@ -1 +1 @@ -05fbd1aab036ecbd14469d6376024439bc931f68 +b8e47d988eb3ba547c102c0b12c351250ed955e0