@@ -69,7 +69,7 @@ function _assertThisInitialized(self) {
69
69
return self;
70
70
}
71
71
72
- var ReactVersion = "18.3.0-www-classic-01513ba4 ";
72
+ var ReactVersion = "18.3.0-www-classic-839801a3 ";
73
73
74
74
var LegacyRoot = 0;
75
75
var ConcurrentRoot = 1;
@@ -180,7 +180,9 @@ var replayFailedUnitOfWorkWithInvokeGuardedCallback =
180
180
enableDO_NOT_USE_disableStrictPassiveEffect =
181
181
dynamicFeatureFlags.enableDO_NOT_USE_disableStrictPassiveEffect,
182
182
disableSchedulerTimeoutInWorkLoop =
183
- dynamicFeatureFlags.disableSchedulerTimeoutInWorkLoop; // On WWW, false is used for a new modern build.
183
+ dynamicFeatureFlags.disableSchedulerTimeoutInWorkLoop,
184
+ enableUseDeferredValueInitialArg =
185
+ dynamicFeatureFlags.enableUseDeferredValueInitialArg; // On WWW, false is used for a new modern build.
184
186
var enableProfilerTimer = true;
185
187
var enableProfilerCommitHooks = true;
186
188
var enableProfilerNestedUpdatePhase = true;
@@ -9740,34 +9742,61 @@ function updateMemo(nextCreate, deps) {
9740
9742
return nextValue;
9741
9743
}
9742
9744
9743
- function mountDeferredValue(value) {
9745
+ function mountDeferredValue(value, initialValue ) {
9744
9746
var hook = mountWorkInProgressHook();
9745
- hook.memoizedState = value;
9746
- return value;
9747
+ return mountDeferredValueImpl(hook, value, initialValue);
9747
9748
}
9748
9749
9749
- function updateDeferredValue(value) {
9750
+ function updateDeferredValue(value, initialValue ) {
9750
9751
var hook = updateWorkInProgressHook();
9751
9752
var resolvedCurrentHook = currentHook;
9752
9753
var prevValue = resolvedCurrentHook.memoizedState;
9753
9754
return updateDeferredValueImpl(hook, prevValue, value);
9754
9755
}
9755
9756
9756
- function rerenderDeferredValue(value) {
9757
+ function rerenderDeferredValue(value, initialValue ) {
9757
9758
var hook = updateWorkInProgressHook();
9758
9759
9759
9760
if (currentHook === null) {
9760
9761
// This is a rerender during a mount.
9761
- hook.memoizedState = value;
9762
- return value;
9762
+ return mountDeferredValueImpl(hook, value, initialValue);
9763
9763
} else {
9764
9764
// This is a rerender during an update.
9765
9765
var prevValue = currentHook.memoizedState;
9766
9766
return updateDeferredValueImpl(hook, prevValue, value);
9767
9767
}
9768
9768
}
9769
9769
9770
- function updateDeferredValueImpl(hook, prevValue, value) {
9770
+ function mountDeferredValueImpl(hook, value, initialValue) {
9771
+ if (enableUseDeferredValueInitialArg && initialValue !== undefined) {
9772
+ // When `initialValue` is provided, we defer the initial render even if the
9773
+ // current render is not synchronous.
9774
+ // TODO: However, to avoid waterfalls, we should not defer if this render
9775
+ // was itself spawned by an earlier useDeferredValue. Plan is to add a
9776
+ // Deferred lane to track this.
9777
+ hook.memoizedState = initialValue; // Schedule a deferred render
9778
+
9779
+ var deferredLane = claimNextTransitionLane();
9780
+ currentlyRenderingFiber$1.lanes = mergeLanes(
9781
+ currentlyRenderingFiber$1.lanes,
9782
+ deferredLane
9783
+ );
9784
+ markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent
9785
+ // from the latest value. The name "baseState" doesn't really match how we
9786
+ // use it because we're reusing a state hook field instead of creating a
9787
+ // new one.
9788
+
9789
+ hook.baseState = true;
9790
+ return initialValue;
9791
+ } else {
9792
+ hook.memoizedState = value;
9793
+ return value;
9794
+ }
9795
+ }
9796
+
9797
+ function updateDeferredValueImpl(hook, prevValue, value, initialValue) {
9798
+ // TODO: We should also check if this component is going from
9799
+ // hidden -> visible. If so, it should use the initialValue arg.
9771
9800
var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes$1);
9772
9801
9773
9802
if (shouldDeferValue) {
@@ -10463,10 +10492,10 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
10463
10492
mountHookTypesDev();
10464
10493
return mountDebugValue();
10465
10494
},
10466
- useDeferredValue: function (value) {
10495
+ useDeferredValue: function (value, initialValue ) {
10467
10496
currentHookNameInDev = "useDeferredValue";
10468
10497
mountHookTypesDev();
10469
- return mountDeferredValue(value);
10498
+ return mountDeferredValue(value, initialValue );
10470
10499
},
10471
10500
useTransition: function () {
10472
10501
currentHookNameInDev = "useTransition";
@@ -10602,10 +10631,10 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
10602
10631
updateHookTypesDev();
10603
10632
return mountDebugValue();
10604
10633
},
10605
- useDeferredValue: function (value) {
10634
+ useDeferredValue: function (value, initialValue ) {
10606
10635
currentHookNameInDev = "useDeferredValue";
10607
10636
updateHookTypesDev();
10608
- return mountDeferredValue(value);
10637
+ return mountDeferredValue(value, initialValue );
10609
10638
},
10610
10639
useTransition: function () {
10611
10640
currentHookNameInDev = "useTransition";
@@ -10739,7 +10768,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
10739
10768
updateHookTypesDev();
10740
10769
return updateDebugValue();
10741
10770
},
10742
- useDeferredValue: function (value) {
10771
+ useDeferredValue: function (value, initialValue ) {
10743
10772
currentHookNameInDev = "useDeferredValue";
10744
10773
updateHookTypesDev();
10745
10774
return updateDeferredValue(value);
@@ -10878,10 +10907,10 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
10878
10907
updateHookTypesDev();
10879
10908
return updateDebugValue();
10880
10909
},
10881
- useDeferredValue: function (value) {
10910
+ useDeferredValue: function (value, initialValue ) {
10882
10911
currentHookNameInDev = "useDeferredValue";
10883
10912
updateHookTypesDev();
10884
- return rerenderDeferredValue(value);
10913
+ return rerenderDeferredValue(value, initialValue );
10885
10914
},
10886
10915
useTransition: function () {
10887
10916
currentHookNameInDev = "useTransition";
@@ -11033,11 +11062,11 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
11033
11062
mountHookTypesDev();
11034
11063
return mountDebugValue();
11035
11064
},
11036
- useDeferredValue: function (value) {
11065
+ useDeferredValue: function (value, initialValue ) {
11037
11066
currentHookNameInDev = "useDeferredValue";
11038
11067
warnInvalidHookAccess();
11039
11068
mountHookTypesDev();
11040
- return mountDeferredValue(value);
11069
+ return mountDeferredValue(value, initialValue );
11041
11070
},
11042
11071
useTransition: function () {
11043
11072
currentHookNameInDev = "useTransition";
@@ -11194,7 +11223,7 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
11194
11223
updateHookTypesDev();
11195
11224
return updateDebugValue();
11196
11225
},
11197
- useDeferredValue: function (value) {
11226
+ useDeferredValue: function (value, initialValue ) {
11198
11227
currentHookNameInDev = "useDeferredValue";
11199
11228
warnInvalidHookAccess();
11200
11229
updateHookTypesDev();
@@ -11355,11 +11384,11 @@ var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
11355
11384
updateHookTypesDev();
11356
11385
return updateDebugValue();
11357
11386
},
11358
- useDeferredValue: function (value) {
11387
+ useDeferredValue: function (value, initialValue ) {
11359
11388
currentHookNameInDev = "useDeferredValue";
11360
11389
warnInvalidHookAccess();
11361
11390
updateHookTypesDev();
11362
- return rerenderDeferredValue(value);
11391
+ return rerenderDeferredValue(value, initialValue );
11363
11392
},
11364
11393
useTransition: function () {
11365
11394
currentHookNameInDev = "useTransition";
0 commit comments