From 105044700ec32bf7a7e609730c703fbf9d8a582b Mon Sep 17 00:00:00 2001 From: acdlite Date: Tue, 17 Oct 2023 17:03:40 +0000 Subject: [PATCH] Prerendering support for useDeferredValue (#27512) ### Based on #27509 Revealing a prerendered tree (hidden -> visible) is considered the same as mounting a brand new tree. So, when an initialValue argument is passed to useDeferredValue, and it's prerendered inside a hidden tree, we should first prerender the initial value. After the initial value has been prerendered, we switch to prerendering the final one. This is the same sequence that we use when mounting new visible tree. Depending on how much prerendering work has been finished by the time the tree is revealed, we may or may not be able to skip all the way to the final value. This means we get the benefits of both prerendering and preview states: if we have enough resources to prerender the whole thing, we do that. If we don't, we have a preview state to show for immediate feedback. DiffTrain build for [75c1bd7ee7e4a87a4dd0f560e157c57957ef823b](https://github.com/facebook/react/commit/75c1bd7ee7e4a87a4dd0f560e157c57957ef823b) --- compiled/facebook-www/REVISION | 2 +- compiled/facebook-www/React-dev.classic.js | 2 +- compiled/facebook-www/React-prod.classic.js | 2 +- compiled/facebook-www/React-prod.modern.js | 2 +- .../facebook-www/React-profiling.modern.js | 2 +- compiled/facebook-www/ReactART-dev.classic.js | 80 ++++++------- compiled/facebook-www/ReactART-dev.modern.js | 80 ++++++------- .../facebook-www/ReactART-prod.classic.js | 73 ++++++----- compiled/facebook-www/ReactART-prod.modern.js | 73 ++++++----- compiled/facebook-www/ReactDOM-dev.classic.js | 80 ++++++------- compiled/facebook-www/ReactDOM-dev.modern.js | 80 ++++++------- .../facebook-www/ReactDOM-prod.classic.js | 113 ++++++++++-------- compiled/facebook-www/ReactDOM-prod.modern.js | 113 ++++++++++-------- .../ReactDOM-profiling.classic.js | 99 ++++++++------- .../facebook-www/ReactDOM-profiling.modern.js | 99 ++++++++------- .../facebook-www/ReactDOMServer-dev.modern.js | 2 +- .../ReactDOMServer-prod.modern.js | 2 +- .../ReactDOMTesting-dev.classic.js | 80 ++++++------- .../ReactDOMTesting-dev.modern.js | 80 ++++++------- .../ReactDOMTesting-prod.classic.js | 113 ++++++++++-------- .../ReactDOMTesting-prod.modern.js | 113 ++++++++++-------- .../ReactTestRenderer-dev.classic.js | 80 ++++++------- .../ReactTestRenderer-dev.modern.js | 80 ++++++------- 23 files changed, 761 insertions(+), 689 deletions(-) diff --git a/compiled/facebook-www/REVISION b/compiled/facebook-www/REVISION index a6a4eca4c8..f172e74bf0 100644 --- a/compiled/facebook-www/REVISION +++ b/compiled/facebook-www/REVISION @@ -1 +1 @@ -b2a68a65c84b63ac86930d88ae5c84380cbbdeb6 +75c1bd7ee7e4a87a4dd0f560e157c57957ef823b diff --git a/compiled/facebook-www/React-dev.classic.js b/compiled/facebook-www/React-dev.classic.js index e32dd86cc9..e60ecb2a8f 100644 --- a/compiled/facebook-www/React-dev.classic.js +++ b/compiled/facebook-www/React-dev.classic.js @@ -27,7 +27,7 @@ if ( } "use strict"; -var ReactVersion = "18.3.0-www-classic-8c719f5e"; +var ReactVersion = "18.3.0-www-classic-08b720b1"; // ATTENTION // When adding new symbols to this file, diff --git a/compiled/facebook-www/React-prod.classic.js b/compiled/facebook-www/React-prod.classic.js index 351feb7c7c..8cebbf7043 100644 --- a/compiled/facebook-www/React-prod.classic.js +++ b/compiled/facebook-www/React-prod.classic.js @@ -587,4 +587,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactCurrentDispatcher.current.useTransition(); }; -exports.version = "18.3.0-www-classic-703d13e3"; +exports.version = "18.3.0-www-classic-a546ef8a"; diff --git a/compiled/facebook-www/React-prod.modern.js b/compiled/facebook-www/React-prod.modern.js index 4d1633e61a..50e4f71c44 100644 --- a/compiled/facebook-www/React-prod.modern.js +++ b/compiled/facebook-www/React-prod.modern.js @@ -579,4 +579,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactCurrentDispatcher.current.useTransition(); }; -exports.version = "18.3.0-www-modern-eba2410d"; +exports.version = "18.3.0-www-modern-f25765d2"; diff --git a/compiled/facebook-www/React-profiling.modern.js b/compiled/facebook-www/React-profiling.modern.js index 9c0889853c..b57ad83bb1 100644 --- a/compiled/facebook-www/React-profiling.modern.js +++ b/compiled/facebook-www/React-profiling.modern.js @@ -590,7 +590,7 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactCurrentDispatcher.current.useTransition(); }; -exports.version = "18.3.0-www-modern-f61d9097"; +exports.version = "18.3.0-www-modern-a1b21365"; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( diff --git a/compiled/facebook-www/ReactART-dev.classic.js b/compiled/facebook-www/ReactART-dev.classic.js index cb27eadf66..31e648ec88 100644 --- a/compiled/facebook-www/ReactART-dev.classic.js +++ b/compiled/facebook-www/ReactART-dev.classic.js @@ -69,7 +69,7 @@ function _assertThisInitialized(self) { return self; } -var ReactVersion = "18.3.0-www-classic-8789cf1c"; +var ReactVersion = "18.3.0-www-classic-bb3a0070"; var LegacyRoot = 0; var ConcurrentRoot = 1; @@ -9802,7 +9802,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -9814,7 +9814,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -9835,12 +9835,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -9849,46 +9844,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -10825,7 +10823,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -11281,7 +11279,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; diff --git a/compiled/facebook-www/ReactART-dev.modern.js b/compiled/facebook-www/ReactART-dev.modern.js index 94e35f850b..08ca4ebb1d 100644 --- a/compiled/facebook-www/ReactART-dev.modern.js +++ b/compiled/facebook-www/ReactART-dev.modern.js @@ -69,7 +69,7 @@ function _assertThisInitialized(self) { return self; } -var ReactVersion = "18.3.0-www-modern-bbf5dd10"; +var ReactVersion = "18.3.0-www-modern-f972e958"; var LegacyRoot = 0; var ConcurrentRoot = 1; @@ -9558,7 +9558,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -9570,7 +9570,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -9591,12 +9591,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -9605,46 +9600,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -10581,7 +10579,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -11037,7 +11035,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; diff --git a/compiled/facebook-www/ReactART-prod.classic.js b/compiled/facebook-www/ReactART-prod.classic.js index 1d092e340f..ceb163918d 100644 --- a/compiled/facebook-www/ReactART-prod.classic.js +++ b/compiled/facebook-www/ReactART-prod.classic.js @@ -3135,24 +3135,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -3518,9 +3519,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -3560,7 +3566,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -10163,19 +10174,19 @@ var slice = Array.prototype.slice, }; return Text; })(React.Component), - devToolsConfig$jscomp$inline_1146 = { + devToolsConfig$jscomp$inline_1147 = { findFiberByHostInstance: function () { return null; }, bundleType: 0, - version: "18.3.0-www-classic-97e3e442", + version: "18.3.0-www-classic-24afbb39", rendererPackageName: "react-art" }; -var internals$jscomp$inline_1321 = { - bundleType: devToolsConfig$jscomp$inline_1146.bundleType, - version: devToolsConfig$jscomp$inline_1146.version, - rendererPackageName: devToolsConfig$jscomp$inline_1146.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1146.rendererConfig, +var internals$jscomp$inline_1322 = { + bundleType: devToolsConfig$jscomp$inline_1147.bundleType, + version: devToolsConfig$jscomp$inline_1147.version, + rendererPackageName: devToolsConfig$jscomp$inline_1147.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1147.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -10192,26 +10203,26 @@ var internals$jscomp$inline_1321 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1146.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1147.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-97e3e442" + reconcilerVersion: "18.3.0-www-classic-24afbb39" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1322 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1323 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1322.isDisabled && - hook$jscomp$inline_1322.supportsFiber + !hook$jscomp$inline_1323.isDisabled && + hook$jscomp$inline_1323.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1322.inject( - internals$jscomp$inline_1321 + (rendererID = hook$jscomp$inline_1323.inject( + internals$jscomp$inline_1322 )), - (injectedHook = hook$jscomp$inline_1322); + (injectedHook = hook$jscomp$inline_1323); } catch (err) {} } var Path = Mode$1.Path; diff --git a/compiled/facebook-www/ReactART-prod.modern.js b/compiled/facebook-www/ReactART-prod.modern.js index 62d9a4b02b..b3c84ec0fc 100644 --- a/compiled/facebook-www/ReactART-prod.modern.js +++ b/compiled/facebook-www/ReactART-prod.modern.js @@ -2945,24 +2945,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -3328,9 +3329,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -3370,7 +3376,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -9832,19 +9843,19 @@ var slice = Array.prototype.slice, }; return Text; })(React.Component), - devToolsConfig$jscomp$inline_1126 = { + devToolsConfig$jscomp$inline_1127 = { findFiberByHostInstance: function () { return null; }, bundleType: 0, - version: "18.3.0-www-modern-504a3f39", + version: "18.3.0-www-modern-4a0e1ba5", rendererPackageName: "react-art" }; -var internals$jscomp$inline_1301 = { - bundleType: devToolsConfig$jscomp$inline_1126.bundleType, - version: devToolsConfig$jscomp$inline_1126.version, - rendererPackageName: devToolsConfig$jscomp$inline_1126.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1126.rendererConfig, +var internals$jscomp$inline_1302 = { + bundleType: devToolsConfig$jscomp$inline_1127.bundleType, + version: devToolsConfig$jscomp$inline_1127.version, + rendererPackageName: devToolsConfig$jscomp$inline_1127.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1127.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -9861,26 +9872,26 @@ var internals$jscomp$inline_1301 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1126.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1127.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-modern-504a3f39" + reconcilerVersion: "18.3.0-www-modern-4a0e1ba5" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1302 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1303 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1302.isDisabled && - hook$jscomp$inline_1302.supportsFiber + !hook$jscomp$inline_1303.isDisabled && + hook$jscomp$inline_1303.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1302.inject( - internals$jscomp$inline_1301 + (rendererID = hook$jscomp$inline_1303.inject( + internals$jscomp$inline_1302 )), - (injectedHook = hook$jscomp$inline_1302); + (injectedHook = hook$jscomp$inline_1303); } catch (err) {} } var Path = Mode$1.Path; diff --git a/compiled/facebook-www/ReactDOM-dev.classic.js b/compiled/facebook-www/ReactDOM-dev.classic.js index f4375788cf..c87599cf3e 100644 --- a/compiled/facebook-www/ReactDOM-dev.classic.js +++ b/compiled/facebook-www/ReactDOM-dev.classic.js @@ -14363,7 +14363,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -14375,7 +14375,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -14396,12 +14396,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -14410,46 +14405,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -15400,7 +15398,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -15856,7 +15854,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -34152,7 +34150,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-classic-1493a174"; +var ReactVersion = "18.3.0-www-classic-3d4cba16"; function createPortal$1( children, diff --git a/compiled/facebook-www/ReactDOM-dev.modern.js b/compiled/facebook-www/ReactDOM-dev.modern.js index c7216c6dc1..36a207b9a9 100644 --- a/compiled/facebook-www/ReactDOM-dev.modern.js +++ b/compiled/facebook-www/ReactDOM-dev.modern.js @@ -14304,7 +14304,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -14316,7 +14316,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -14337,12 +14337,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -14351,46 +14346,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -15341,7 +15339,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -15797,7 +15795,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -33997,7 +33995,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-modern-01dd8496"; +var ReactVersion = "18.3.0-www-modern-e95a7c7a"; function createPortal$1( children, diff --git a/compiled/facebook-www/ReactDOM-prod.classic.js b/compiled/facebook-www/ReactDOM-prod.classic.js index cbf823870c..190484a499 100644 --- a/compiled/facebook-www/ReactDOM-prod.classic.js +++ b/compiled/facebook-www/ReactDOM-prod.classic.js @@ -3890,24 +3890,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4303,9 +4304,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4345,7 +4351,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -12587,14 +12598,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$345; if (canUseDOM) { - var isSupported$jscomp$inline_1528 = "oninput" in document; - if (!isSupported$jscomp$inline_1528) { - var element$jscomp$inline_1529 = document.createElement("div"); - element$jscomp$inline_1529.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1528 = - "function" === typeof element$jscomp$inline_1529.oninput; + var isSupported$jscomp$inline_1529 = "oninput" in document; + if (!isSupported$jscomp$inline_1529) { + var element$jscomp$inline_1530 = document.createElement("div"); + element$jscomp$inline_1530.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1529 = + "function" === typeof element$jscomp$inline_1530.oninput; } - JSCompiler_inline_result$jscomp$345 = isSupported$jscomp$inline_1528; + JSCompiler_inline_result$jscomp$345 = isSupported$jscomp$inline_1529; } else JSCompiler_inline_result$jscomp$345 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$345 && @@ -12906,20 +12917,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1569 = 0; - i$jscomp$inline_1569 < simpleEventPluginEvents.length; - i$jscomp$inline_1569++ + var i$jscomp$inline_1570 = 0; + i$jscomp$inline_1570 < simpleEventPluginEvents.length; + i$jscomp$inline_1570++ ) { - var eventName$jscomp$inline_1570 = - simpleEventPluginEvents[i$jscomp$inline_1569], - domEventName$jscomp$inline_1571 = - eventName$jscomp$inline_1570.toLowerCase(), - capitalizedEvent$jscomp$inline_1572 = - eventName$jscomp$inline_1570[0].toUpperCase() + - eventName$jscomp$inline_1570.slice(1); + var eventName$jscomp$inline_1571 = + simpleEventPluginEvents[i$jscomp$inline_1570], + domEventName$jscomp$inline_1572 = + eventName$jscomp$inline_1571.toLowerCase(), + capitalizedEvent$jscomp$inline_1573 = + eventName$jscomp$inline_1571[0].toUpperCase() + + eventName$jscomp$inline_1571.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1571, - "on" + capitalizedEvent$jscomp$inline_1572 + domEventName$jscomp$inline_1572, + "on" + capitalizedEvent$jscomp$inline_1573 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16459,17 +16470,17 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1795 = { +var devToolsConfig$jscomp$inline_1796 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-classic-2b4fb6cd", + version: "18.3.0-www-classic-5728733b", rendererPackageName: "react-dom" }; -var internals$jscomp$inline_2141 = { - bundleType: devToolsConfig$jscomp$inline_1795.bundleType, - version: devToolsConfig$jscomp$inline_1795.version, - rendererPackageName: devToolsConfig$jscomp$inline_1795.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1795.rendererConfig, +var internals$jscomp$inline_2142 = { + bundleType: devToolsConfig$jscomp$inline_1796.bundleType, + version: devToolsConfig$jscomp$inline_1796.version, + rendererPackageName: devToolsConfig$jscomp$inline_1796.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1796.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -16485,26 +16496,26 @@ var internals$jscomp$inline_2141 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1795.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1796.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-2b4fb6cd" + reconcilerVersion: "18.3.0-www-classic-5728733b" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2142 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2143 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2142.isDisabled && - hook$jscomp$inline_2142.supportsFiber + !hook$jscomp$inline_2143.isDisabled && + hook$jscomp$inline_2143.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2142.inject( - internals$jscomp$inline_2141 + (rendererID = hook$jscomp$inline_2143.inject( + internals$jscomp$inline_2142 )), - (injectedHook = hook$jscomp$inline_2142); + (injectedHook = hook$jscomp$inline_2143); } catch (err) {} } assign(Internals, { @@ -16829,4 +16840,4 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-classic-2b4fb6cd"; +exports.version = "18.3.0-www-classic-5728733b"; diff --git a/compiled/facebook-www/ReactDOM-prod.modern.js b/compiled/facebook-www/ReactDOM-prod.modern.js index 5870781630..82816d21eb 100644 --- a/compiled/facebook-www/ReactDOM-prod.modern.js +++ b/compiled/facebook-www/ReactDOM-prod.modern.js @@ -3787,24 +3787,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4200,9 +4201,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4242,7 +4248,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -12831,14 +12842,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$343; if (canUseDOM) { - var isSupported$jscomp$inline_1527 = "oninput" in document; - if (!isSupported$jscomp$inline_1527) { - var element$jscomp$inline_1528 = document.createElement("div"); - element$jscomp$inline_1528.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1527 = - "function" === typeof element$jscomp$inline_1528.oninput; + var isSupported$jscomp$inline_1528 = "oninput" in document; + if (!isSupported$jscomp$inline_1528) { + var element$jscomp$inline_1529 = document.createElement("div"); + element$jscomp$inline_1529.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1528 = + "function" === typeof element$jscomp$inline_1529.oninput; } - JSCompiler_inline_result$jscomp$343 = isSupported$jscomp$inline_1527; + JSCompiler_inline_result$jscomp$343 = isSupported$jscomp$inline_1528; } else JSCompiler_inline_result$jscomp$343 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$343 && @@ -13150,20 +13161,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1568 = 0; - i$jscomp$inline_1568 < simpleEventPluginEvents.length; - i$jscomp$inline_1568++ + var i$jscomp$inline_1569 = 0; + i$jscomp$inline_1569 < simpleEventPluginEvents.length; + i$jscomp$inline_1569++ ) { - var eventName$jscomp$inline_1569 = - simpleEventPluginEvents[i$jscomp$inline_1568], - domEventName$jscomp$inline_1570 = - eventName$jscomp$inline_1569.toLowerCase(), - capitalizedEvent$jscomp$inline_1571 = - eventName$jscomp$inline_1569[0].toUpperCase() + - eventName$jscomp$inline_1569.slice(1); + var eventName$jscomp$inline_1570 = + simpleEventPluginEvents[i$jscomp$inline_1569], + domEventName$jscomp$inline_1571 = + eventName$jscomp$inline_1570.toLowerCase(), + capitalizedEvent$jscomp$inline_1572 = + eventName$jscomp$inline_1570[0].toUpperCase() + + eventName$jscomp$inline_1570.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1570, - "on" + capitalizedEvent$jscomp$inline_1571 + domEventName$jscomp$inline_1571, + "on" + capitalizedEvent$jscomp$inline_1572 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -15985,17 +15996,17 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1754 = { +var devToolsConfig$jscomp$inline_1755 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-modern-f680b500", + version: "18.3.0-www-modern-b72d3d1b", rendererPackageName: "react-dom" }; -var internals$jscomp$inline_2105 = { - bundleType: devToolsConfig$jscomp$inline_1754.bundleType, - version: devToolsConfig$jscomp$inline_1754.version, - rendererPackageName: devToolsConfig$jscomp$inline_1754.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1754.rendererConfig, +var internals$jscomp$inline_2106 = { + bundleType: devToolsConfig$jscomp$inline_1755.bundleType, + version: devToolsConfig$jscomp$inline_1755.version, + rendererPackageName: devToolsConfig$jscomp$inline_1755.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1755.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -16012,26 +16023,26 @@ var internals$jscomp$inline_2105 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1754.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1755.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-modern-f680b500" + reconcilerVersion: "18.3.0-www-modern-b72d3d1b" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2106 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2107 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2106.isDisabled && - hook$jscomp$inline_2106.supportsFiber + !hook$jscomp$inline_2107.isDisabled && + hook$jscomp$inline_2107.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2106.inject( - internals$jscomp$inline_2105 + (rendererID = hook$jscomp$inline_2107.inject( + internals$jscomp$inline_2106 )), - (injectedHook = hook$jscomp$inline_2106); + (injectedHook = hook$jscomp$inline_2107); } catch (err) {} } exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals; @@ -16284,4 +16295,4 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-modern-f680b500"; +exports.version = "18.3.0-www-modern-b72d3d1b"; diff --git a/compiled/facebook-www/ReactDOM-profiling.classic.js b/compiled/facebook-www/ReactDOM-profiling.classic.js index 33e4906cef..7c9b92b340 100644 --- a/compiled/facebook-www/ReactDOM-profiling.classic.js +++ b/compiled/facebook-www/ReactDOM-profiling.classic.js @@ -4037,24 +4037,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4453,9 +4454,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4495,7 +4501,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -13363,14 +13374,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$366; if (canUseDOM) { - var isSupported$jscomp$inline_1613 = "oninput" in document; - if (!isSupported$jscomp$inline_1613) { - var element$jscomp$inline_1614 = document.createElement("div"); - element$jscomp$inline_1614.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1613 = - "function" === typeof element$jscomp$inline_1614.oninput; + var isSupported$jscomp$inline_1614 = "oninput" in document; + if (!isSupported$jscomp$inline_1614) { + var element$jscomp$inline_1615 = document.createElement("div"); + element$jscomp$inline_1615.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1614 = + "function" === typeof element$jscomp$inline_1615.oninput; } - JSCompiler_inline_result$jscomp$366 = isSupported$jscomp$inline_1613; + JSCompiler_inline_result$jscomp$366 = isSupported$jscomp$inline_1614; } else JSCompiler_inline_result$jscomp$366 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$366 && @@ -13682,20 +13693,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1654 = 0; - i$jscomp$inline_1654 < simpleEventPluginEvents.length; - i$jscomp$inline_1654++ + var i$jscomp$inline_1655 = 0; + i$jscomp$inline_1655 < simpleEventPluginEvents.length; + i$jscomp$inline_1655++ ) { - var eventName$jscomp$inline_1655 = - simpleEventPluginEvents[i$jscomp$inline_1654], - domEventName$jscomp$inline_1656 = - eventName$jscomp$inline_1655.toLowerCase(), - capitalizedEvent$jscomp$inline_1657 = - eventName$jscomp$inline_1655[0].toUpperCase() + - eventName$jscomp$inline_1655.slice(1); + var eventName$jscomp$inline_1656 = + simpleEventPluginEvents[i$jscomp$inline_1655], + domEventName$jscomp$inline_1657 = + eventName$jscomp$inline_1656.toLowerCase(), + capitalizedEvent$jscomp$inline_1658 = + eventName$jscomp$inline_1656[0].toUpperCase() + + eventName$jscomp$inline_1656.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1656, - "on" + capitalizedEvent$jscomp$inline_1657 + domEventName$jscomp$inline_1657, + "on" + capitalizedEvent$jscomp$inline_1658 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -17235,10 +17246,10 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1880 = { +var devToolsConfig$jscomp$inline_1881 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-classic-946dac52", + version: "18.3.0-www-classic-60bcbdf9", rendererPackageName: "react-dom" }; (function (internals) { @@ -17256,10 +17267,10 @@ var devToolsConfig$jscomp$inline_1880 = { } catch (err) {} return hook.checkDCE ? !0 : !1; })({ - bundleType: devToolsConfig$jscomp$inline_1880.bundleType, - version: devToolsConfig$jscomp$inline_1880.version, - rendererPackageName: devToolsConfig$jscomp$inline_1880.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1880.rendererConfig, + bundleType: devToolsConfig$jscomp$inline_1881.bundleType, + version: devToolsConfig$jscomp$inline_1881.version, + rendererPackageName: devToolsConfig$jscomp$inline_1881.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1881.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -17275,14 +17286,14 @@ var devToolsConfig$jscomp$inline_1880 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1880.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1881.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-946dac52" + reconcilerVersion: "18.3.0-www-classic-60bcbdf9" }); assign(Internals, { ReactBrowserEventEmitter: { @@ -17606,7 +17617,7 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-classic-946dac52"; +exports.version = "18.3.0-www-classic-60bcbdf9"; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( diff --git a/compiled/facebook-www/ReactDOM-profiling.modern.js b/compiled/facebook-www/ReactDOM-profiling.modern.js index 49a2101a05..8c02bd129c 100644 --- a/compiled/facebook-www/ReactDOM-profiling.modern.js +++ b/compiled/facebook-www/ReactDOM-profiling.modern.js @@ -3934,24 +3934,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4350,9 +4351,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4392,7 +4398,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -13601,14 +13612,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$364; if (canUseDOM) { - var isSupported$jscomp$inline_1612 = "oninput" in document; - if (!isSupported$jscomp$inline_1612) { - var element$jscomp$inline_1613 = document.createElement("div"); - element$jscomp$inline_1613.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1612 = - "function" === typeof element$jscomp$inline_1613.oninput; + var isSupported$jscomp$inline_1613 = "oninput" in document; + if (!isSupported$jscomp$inline_1613) { + var element$jscomp$inline_1614 = document.createElement("div"); + element$jscomp$inline_1614.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1613 = + "function" === typeof element$jscomp$inline_1614.oninput; } - JSCompiler_inline_result$jscomp$364 = isSupported$jscomp$inline_1612; + JSCompiler_inline_result$jscomp$364 = isSupported$jscomp$inline_1613; } else JSCompiler_inline_result$jscomp$364 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$364 && @@ -13920,20 +13931,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1653 = 0; - i$jscomp$inline_1653 < simpleEventPluginEvents.length; - i$jscomp$inline_1653++ + var i$jscomp$inline_1654 = 0; + i$jscomp$inline_1654 < simpleEventPluginEvents.length; + i$jscomp$inline_1654++ ) { - var eventName$jscomp$inline_1654 = - simpleEventPluginEvents[i$jscomp$inline_1653], - domEventName$jscomp$inline_1655 = - eventName$jscomp$inline_1654.toLowerCase(), - capitalizedEvent$jscomp$inline_1656 = - eventName$jscomp$inline_1654[0].toUpperCase() + - eventName$jscomp$inline_1654.slice(1); + var eventName$jscomp$inline_1655 = + simpleEventPluginEvents[i$jscomp$inline_1654], + domEventName$jscomp$inline_1656 = + eventName$jscomp$inline_1655.toLowerCase(), + capitalizedEvent$jscomp$inline_1657 = + eventName$jscomp$inline_1655[0].toUpperCase() + + eventName$jscomp$inline_1655.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1655, - "on" + capitalizedEvent$jscomp$inline_1656 + domEventName$jscomp$inline_1656, + "on" + capitalizedEvent$jscomp$inline_1657 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16755,10 +16766,10 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1839 = { +var devToolsConfig$jscomp$inline_1840 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-modern-e1100111", + version: "18.3.0-www-modern-3c8736cc", rendererPackageName: "react-dom" }; (function (internals) { @@ -16776,10 +16787,10 @@ var devToolsConfig$jscomp$inline_1839 = { } catch (err) {} return hook.checkDCE ? !0 : !1; })({ - bundleType: devToolsConfig$jscomp$inline_1839.bundleType, - version: devToolsConfig$jscomp$inline_1839.version, - rendererPackageName: devToolsConfig$jscomp$inline_1839.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1839.rendererConfig, + bundleType: devToolsConfig$jscomp$inline_1840.bundleType, + version: devToolsConfig$jscomp$inline_1840.version, + rendererPackageName: devToolsConfig$jscomp$inline_1840.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1840.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -16796,14 +16807,14 @@ var devToolsConfig$jscomp$inline_1839 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1839.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1840.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-modern-e1100111" + reconcilerVersion: "18.3.0-www-modern-3c8736cc" }); exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals; exports.createPortal = function (children, container) { @@ -17055,7 +17066,7 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-modern-e1100111"; +exports.version = "18.3.0-www-modern-3c8736cc"; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( diff --git a/compiled/facebook-www/ReactDOMServer-dev.modern.js b/compiled/facebook-www/ReactDOMServer-dev.modern.js index 11a40e55f5..ef65b16829 100644 --- a/compiled/facebook-www/ReactDOMServer-dev.modern.js +++ b/compiled/facebook-www/ReactDOMServer-dev.modern.js @@ -19,7 +19,7 @@ if (__DEV__) { var React = require("react"); var ReactDOM = require("react-dom"); -var ReactVersion = "18.3.0-www-modern-bbf5dd10"; +var ReactVersion = "18.3.0-www-modern-f972e958"; // This refers to a WWW module. var warningWWW = require("warning"); diff --git a/compiled/facebook-www/ReactDOMServer-prod.modern.js b/compiled/facebook-www/ReactDOMServer-prod.modern.js index eac38aed1e..9c69532780 100644 --- a/compiled/facebook-www/ReactDOMServer-prod.modern.js +++ b/compiled/facebook-www/ReactDOMServer-prod.modern.js @@ -4985,4 +4985,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "18.3.0-www-modern-504a3f39"; +exports.version = "18.3.0-www-modern-4a0e1ba5"; diff --git a/compiled/facebook-www/ReactDOMTesting-dev.classic.js b/compiled/facebook-www/ReactDOMTesting-dev.classic.js index 72289560ac..d2e63db0d9 100644 --- a/compiled/facebook-www/ReactDOMTesting-dev.classic.js +++ b/compiled/facebook-www/ReactDOMTesting-dev.classic.js @@ -14497,7 +14497,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -14509,7 +14509,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -14530,12 +14530,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -14544,46 +14539,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -15534,7 +15532,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -15990,7 +15988,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -34769,7 +34767,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-classic-a0b316c1"; +var ReactVersion = "18.3.0-www-classic-2a0db555"; function createPortal$1( children, diff --git a/compiled/facebook-www/ReactDOMTesting-dev.modern.js b/compiled/facebook-www/ReactDOMTesting-dev.modern.js index 4df63ef4ed..1ff85dcc92 100644 --- a/compiled/facebook-www/ReactDOMTesting-dev.modern.js +++ b/compiled/facebook-www/ReactDOMTesting-dev.modern.js @@ -14438,7 +14438,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -14450,7 +14450,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -14471,12 +14471,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -14485,46 +14480,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -15475,7 +15473,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -15931,7 +15929,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -34614,7 +34612,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-modern-eba2410d"; +var ReactVersion = "18.3.0-www-modern-f25765d2"; function createPortal$1( children, diff --git a/compiled/facebook-www/ReactDOMTesting-prod.classic.js b/compiled/facebook-www/ReactDOMTesting-prod.classic.js index 6cbee82050..73bb7ed81d 100644 --- a/compiled/facebook-www/ReactDOMTesting-prod.classic.js +++ b/compiled/facebook-www/ReactDOMTesting-prod.classic.js @@ -3976,24 +3976,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4389,9 +4390,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4431,7 +4437,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -12859,14 +12870,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$347; if (canUseDOM) { - var isSupported$jscomp$inline_1557 = "oninput" in document; - if (!isSupported$jscomp$inline_1557) { - var element$jscomp$inline_1558 = document.createElement("div"); - element$jscomp$inline_1558.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1557 = - "function" === typeof element$jscomp$inline_1558.oninput; + var isSupported$jscomp$inline_1558 = "oninput" in document; + if (!isSupported$jscomp$inline_1558) { + var element$jscomp$inline_1559 = document.createElement("div"); + element$jscomp$inline_1559.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1558 = + "function" === typeof element$jscomp$inline_1559.oninput; } - JSCompiler_inline_result$jscomp$347 = isSupported$jscomp$inline_1557; + JSCompiler_inline_result$jscomp$347 = isSupported$jscomp$inline_1558; } else JSCompiler_inline_result$jscomp$347 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$347 && @@ -13178,20 +13189,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1598 = 0; - i$jscomp$inline_1598 < simpleEventPluginEvents.length; - i$jscomp$inline_1598++ + var i$jscomp$inline_1599 = 0; + i$jscomp$inline_1599 < simpleEventPluginEvents.length; + i$jscomp$inline_1599++ ) { - var eventName$jscomp$inline_1599 = - simpleEventPluginEvents[i$jscomp$inline_1598], - domEventName$jscomp$inline_1600 = - eventName$jscomp$inline_1599.toLowerCase(), - capitalizedEvent$jscomp$inline_1601 = - eventName$jscomp$inline_1599[0].toUpperCase() + - eventName$jscomp$inline_1599.slice(1); + var eventName$jscomp$inline_1600 = + simpleEventPluginEvents[i$jscomp$inline_1599], + domEventName$jscomp$inline_1601 = + eventName$jscomp$inline_1600.toLowerCase(), + capitalizedEvent$jscomp$inline_1602 = + eventName$jscomp$inline_1600[0].toUpperCase() + + eventName$jscomp$inline_1600.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1600, - "on" + capitalizedEvent$jscomp$inline_1601 + domEventName$jscomp$inline_1601, + "on" + capitalizedEvent$jscomp$inline_1602 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16788,17 +16799,17 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1824 = { +var devToolsConfig$jscomp$inline_1825 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-classic-8c719f5e", + version: "18.3.0-www-classic-08b720b1", rendererPackageName: "react-dom" }; -var internals$jscomp$inline_2175 = { - bundleType: devToolsConfig$jscomp$inline_1824.bundleType, - version: devToolsConfig$jscomp$inline_1824.version, - rendererPackageName: devToolsConfig$jscomp$inline_1824.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1824.rendererConfig, +var internals$jscomp$inline_2176 = { + bundleType: devToolsConfig$jscomp$inline_1825.bundleType, + version: devToolsConfig$jscomp$inline_1825.version, + rendererPackageName: devToolsConfig$jscomp$inline_1825.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1825.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -16814,26 +16825,26 @@ var internals$jscomp$inline_2175 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1824.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1825.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-8c719f5e" + reconcilerVersion: "18.3.0-www-classic-08b720b1" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2176 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2177 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2176.isDisabled && - hook$jscomp$inline_2176.supportsFiber + !hook$jscomp$inline_2177.isDisabled && + hook$jscomp$inline_2177.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2176.inject( - internals$jscomp$inline_2175 + (rendererID = hook$jscomp$inline_2177.inject( + internals$jscomp$inline_2176 )), - (injectedHook = hook$jscomp$inline_2176); + (injectedHook = hook$jscomp$inline_2177); } catch (err) {} } assign(Internals, { @@ -17309,4 +17320,4 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-classic-8c719f5e"; +exports.version = "18.3.0-www-classic-08b720b1"; diff --git a/compiled/facebook-www/ReactDOMTesting-prod.modern.js b/compiled/facebook-www/ReactDOMTesting-prod.modern.js index 127b8de513..f7274e9ab8 100644 --- a/compiled/facebook-www/ReactDOMTesting-prod.modern.js +++ b/compiled/facebook-www/ReactDOMTesting-prod.modern.js @@ -3924,24 +3924,25 @@ function mountDeferredValueImpl(hook, value, initialValue) { void 0 !== initialValue && 0 === (renderLanes & 1073741824) ? ((hook.memoizedState = initialValue), - (value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0), + (hook = requestDeferredLane()), + (currentlyRenderingFiber$1.lanes |= hook), + (workInProgressRootSkippedLanes |= hook), initialValue) : (hook.memoizedState = value); } -function updateDeferredValueImpl(hook, prevValue, value) { - if (0 === (renderLanes & 42)) +function updateDeferredValueImpl(hook, prevValue, value, initialValue) { + if (objectIs(value, prevValue)) return value; + if (null !== currentTreeHiddenStackCursor.current) return ( - hook.baseState && ((hook.baseState = !1), (didReceiveUpdate = !0)), - (hook.memoizedState = value) + (hook = mountDeferredValueImpl(hook, value, initialValue)), + objectIs(hook, prevValue) || (didReceiveUpdate = !0), + hook ); - objectIs(value, prevValue) || - ((value = requestDeferredLane()), - (currentlyRenderingFiber$1.lanes |= value), - (workInProgressRootSkippedLanes |= value), - (hook.baseState = !0)); + if (0 === (renderLanes & 42)) + return (didReceiveUpdate = !0), (hook.memoizedState = value); + hook = requestDeferredLane(); + currentlyRenderingFiber$1.lanes |= hook; + workInProgressRootSkippedLanes |= hook; return prevValue; } function startTransition( @@ -4337,9 +4338,14 @@ var HooksDispatcherOnUpdate = { return updateReducer(basicStateReducer); }, useDebugValue: mountDebugValue, - useDeferredValue: function (value) { + useDeferredValue: function (value, initialValue) { var hook = updateWorkInProgressHook(); - return updateDeferredValueImpl(hook, currentHook.memoizedState, value); + return updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = updateReducer(basicStateReducer)[0], @@ -4379,7 +4385,12 @@ var HooksDispatcherOnRerender = { var hook = updateWorkInProgressHook(); return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) - : updateDeferredValueImpl(hook, currentHook.memoizedState, value); + : updateDeferredValueImpl( + hook, + currentHook.memoizedState, + value, + initialValue + ); }, useTransition: function () { var booleanOrThenable = rerenderReducer(basicStateReducer)[0], @@ -13154,14 +13165,14 @@ var isInputEventSupported = !1; if (canUseDOM) { var JSCompiler_inline_result$jscomp$345; if (canUseDOM) { - var isSupported$jscomp$inline_1556 = "oninput" in document; - if (!isSupported$jscomp$inline_1556) { - var element$jscomp$inline_1557 = document.createElement("div"); - element$jscomp$inline_1557.setAttribute("oninput", "return;"); - isSupported$jscomp$inline_1556 = - "function" === typeof element$jscomp$inline_1557.oninput; + var isSupported$jscomp$inline_1557 = "oninput" in document; + if (!isSupported$jscomp$inline_1557) { + var element$jscomp$inline_1558 = document.createElement("div"); + element$jscomp$inline_1558.setAttribute("oninput", "return;"); + isSupported$jscomp$inline_1557 = + "function" === typeof element$jscomp$inline_1558.oninput; } - JSCompiler_inline_result$jscomp$345 = isSupported$jscomp$inline_1556; + JSCompiler_inline_result$jscomp$345 = isSupported$jscomp$inline_1557; } else JSCompiler_inline_result$jscomp$345 = !1; isInputEventSupported = JSCompiler_inline_result$jscomp$345 && @@ -13473,20 +13484,20 @@ function registerSimpleEvent(domEventName, reactName) { registerTwoPhaseEvent(reactName, [domEventName]); } for ( - var i$jscomp$inline_1597 = 0; - i$jscomp$inline_1597 < simpleEventPluginEvents.length; - i$jscomp$inline_1597++ + var i$jscomp$inline_1598 = 0; + i$jscomp$inline_1598 < simpleEventPluginEvents.length; + i$jscomp$inline_1598++ ) { - var eventName$jscomp$inline_1598 = - simpleEventPluginEvents[i$jscomp$inline_1597], - domEventName$jscomp$inline_1599 = - eventName$jscomp$inline_1598.toLowerCase(), - capitalizedEvent$jscomp$inline_1600 = - eventName$jscomp$inline_1598[0].toUpperCase() + - eventName$jscomp$inline_1598.slice(1); + var eventName$jscomp$inline_1599 = + simpleEventPluginEvents[i$jscomp$inline_1598], + domEventName$jscomp$inline_1600 = + eventName$jscomp$inline_1599.toLowerCase(), + capitalizedEvent$jscomp$inline_1601 = + eventName$jscomp$inline_1599[0].toUpperCase() + + eventName$jscomp$inline_1599.slice(1); registerSimpleEvent( - domEventName$jscomp$inline_1599, - "on" + capitalizedEvent$jscomp$inline_1600 + domEventName$jscomp$inline_1600, + "on" + capitalizedEvent$jscomp$inline_1601 ); } registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); @@ -16365,17 +16376,17 @@ Internals.Events = [ restoreStateIfNeeded, batchedUpdates$1 ]; -var devToolsConfig$jscomp$inline_1783 = { +var devToolsConfig$jscomp$inline_1784 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-modern-f61d9097", + version: "18.3.0-www-modern-a1b21365", rendererPackageName: "react-dom" }; -var internals$jscomp$inline_2139 = { - bundleType: devToolsConfig$jscomp$inline_1783.bundleType, - version: devToolsConfig$jscomp$inline_1783.version, - rendererPackageName: devToolsConfig$jscomp$inline_1783.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1783.rendererConfig, +var internals$jscomp$inline_2140 = { + bundleType: devToolsConfig$jscomp$inline_1784.bundleType, + version: devToolsConfig$jscomp$inline_1784.version, + rendererPackageName: devToolsConfig$jscomp$inline_1784.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1784.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -16392,26 +16403,26 @@ var internals$jscomp$inline_2139 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1783.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1784.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-modern-f61d9097" + reconcilerVersion: "18.3.0-www-modern-a1b21365" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_2140 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_2141 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_2140.isDisabled && - hook$jscomp$inline_2140.supportsFiber + !hook$jscomp$inline_2141.isDisabled && + hook$jscomp$inline_2141.supportsFiber ) try { - (rendererID = hook$jscomp$inline_2140.inject( - internals$jscomp$inline_2139 + (rendererID = hook$jscomp$inline_2141.inject( + internals$jscomp$inline_2140 )), - (injectedHook = hook$jscomp$inline_2140); + (injectedHook = hook$jscomp$inline_2141); } catch (err) {} } exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals; @@ -16815,4 +16826,4 @@ exports.useFormState = function () { exports.useFormStatus = function () { throw Error(formatProdErrorMessage(248)); }; -exports.version = "18.3.0-www-modern-f61d9097"; +exports.version = "18.3.0-www-modern-a1b21365"; diff --git a/compiled/facebook-www/ReactTestRenderer-dev.classic.js b/compiled/facebook-www/ReactTestRenderer-dev.classic.js index 23e8baed1d..99491a3867 100644 --- a/compiled/facebook-www/ReactTestRenderer-dev.classic.js +++ b/compiled/facebook-www/ReactTestRenderer-dev.classic.js @@ -8832,7 +8832,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -8844,7 +8844,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -8865,12 +8865,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -8879,46 +8874,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -9817,7 +9815,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -10271,7 +10269,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -25260,7 +25258,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-classic-703d13e3"; +var ReactVersion = "18.3.0-www-classic-a546ef8a"; // Might add PROFILE later. diff --git a/compiled/facebook-www/ReactTestRenderer-dev.modern.js b/compiled/facebook-www/ReactTestRenderer-dev.modern.js index 61ff2550c3..7154a733a9 100644 --- a/compiled/facebook-www/ReactTestRenderer-dev.modern.js +++ b/compiled/facebook-www/ReactTestRenderer-dev.modern.js @@ -8832,7 +8832,7 @@ function updateDeferredValue(value, initialValue) { var hook = updateWorkInProgressHook(); var resolvedCurrentHook = currentHook; var prevValue = resolvedCurrentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } function rerenderDeferredValue(value, initialValue) { @@ -8844,7 +8844,7 @@ function rerenderDeferredValue(value, initialValue) { } else { // This is a rerender during an update. var prevValue = currentHook.memoizedState; - return updateDeferredValueImpl(hook, prevValue, value); + return updateDeferredValueImpl(hook, prevValue, value, initialValue); } } @@ -8865,12 +8865,7 @@ function mountDeferredValueImpl(hook, value, initialValue) { currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. - - hook.baseState = true; + markSkippedUpdateLanes(deferredLane); return initialValue; } else { hook.memoizedState = value; @@ -8879,46 +8874,49 @@ function mountDeferredValueImpl(hook, value, initialValue) { } function updateDeferredValueImpl(hook, prevValue, value, initialValue) { - // TODO: We should also check if this component is going from - // hidden -> visible. If so, it should use the initialValue arg. - var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + if (objectIs(value, prevValue)) { + // The incoming value is referentially identical to the currently rendered + // value, so we can bail out quickly. + return value; + } else { + // Received a new value that's different from the current value. + // Check if we're inside a hidden tree + if (isCurrentTreeHidden()) { + // Revealing a prerendered tree is considered the same as mounting new + // one, so we reuse the "mount" path in this case. + var resultValue = mountDeferredValueImpl(hook, value, initialValue); // Unlike during an actual mount, we need to mark this as an update if + // the value changed. - if (shouldDeferValue) { - // This is an urgent update. If the value has changed, keep using the - // previous value and spawn a deferred render to update it later. - if (!objectIs(value, prevValue)) { + if (!objectIs(resultValue, prevValue)) { + markWorkInProgressReceivedUpdate(); + } + + return resultValue; + } + + var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes); + + if (shouldDeferValue) { + // This is an urgent update. Since the value has changed, keep using the + // previous value and spawn a deferred render to update it later. // Schedule a deferred render var deferredLane = requestDeferredLane(); currentlyRenderingFiber$1.lanes = mergeLanes( currentlyRenderingFiber$1.lanes, deferredLane ); - markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent - // from the latest value. The name "baseState" doesn't really match how we - // use it because we're reusing a state hook field instead of creating a - // new one. + markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update, + // because we did not render a new value. - hook.baseState = true; - } // Reuse the previous value - - return prevValue; - } else { - // This is not an urgent update, so we can use the latest value regardless - // of what it is. No need to defer it. - // However, if we're currently inside a spawned render, then we need to mark - // this as an update to prevent the fiber from bailing out. - // - // `baseState` is true when the current value is different from the rendered - // value. The name doesn't really match how we use it because we're reusing - // a state hook field instead of creating a new one. - if (hook.baseState) { - // Flip this back to false. - hook.baseState = false; + return prevValue; + } else { + // This is not an urgent update, so we can use the latest value regardless + // of what it is. No need to defer it. + // Mark this as an update to prevent the fiber from bailing out. markWorkInProgressReceivedUpdate(); + hook.memoizedState = value; + return value; } - - hook.memoizedState = value; - return value; } } @@ -9817,7 +9815,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; useDeferredValue: function (value, initialValue) { currentHookNameInDev = "useDeferredValue"; updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -10271,7 +10269,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null; currentHookNameInDev = "useDeferredValue"; warnInvalidHookAccess(); updateHookTypesDev(); - return updateDeferredValue(value); + return updateDeferredValue(value, initialValue); }, useTransition: function () { currentHookNameInDev = "useTransition"; @@ -25260,7 +25258,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-modern-e2703e39"; +var ReactVersion = "18.3.0-www-modern-7cbe762d"; // Might add PROFILE later.