Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0917467

Browse files
committed
Add initialValue option to useDeferredValue
Adds a new argument to useDeferredValue, `initialValue`, that is used during initial mount, but does not implement it yet. This is an experimental feature and is disabled in the canary build.
1 parent 77ec618 commit 0917467

13 files changed

+39
-25
lines changed

packages/react-debug-tools/src/ReactDebugHooks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ function useTransition(): [
306306
return [false, callback => {}];
307307
}
308308

309-
function useDeferredValue<T>(value: T): T {
309+
function useDeferredValue<T>(value: T, initialValue?: T): T {
310310
const hook = nextHook();
311311
hookLog.push({
312312
primitive: 'DeferredValue',

packages/react-reconciler/src/ReactFiberHooks.js

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2638,20 +2638,20 @@ function updateMemo<T>(
26382638
return nextValue;
26392639
}
26402640

2641-
function mountDeferredValue<T>(value: T): T {
2641+
function mountDeferredValue<T>(value: T, initialValue?: T): T {
26422642
const hook = mountWorkInProgressHook();
26432643
hook.memoizedState = value;
26442644
return value;
26452645
}
26462646

2647-
function updateDeferredValue<T>(value: T): T {
2647+
function updateDeferredValue<T>(value: T, initialValue?: T): T {
26482648
const hook = updateWorkInProgressHook();
26492649
const resolvedCurrentHook: Hook = (currentHook: any);
26502650
const prevValue: T = resolvedCurrentHook.memoizedState;
2651-
return updateDeferredValueImpl(hook, prevValue, value);
2651+
return updateDeferredValueImpl(hook, prevValue, value, initialValue);
26522652
}
26532653

2654-
function rerenderDeferredValue<T>(value: T): T {
2654+
function rerenderDeferredValue<T>(value: T, initialValue?: T): T {
26552655
const hook = updateWorkInProgressHook();
26562656
if (currentHook === null) {
26572657
// This is a rerender during a mount.
@@ -2660,11 +2660,16 @@ function rerenderDeferredValue<T>(value: T): T {
26602660
} else {
26612661
// This is a rerender during an update.
26622662
const prevValue: T = currentHook.memoizedState;
2663-
return updateDeferredValueImpl(hook, prevValue, value);
2663+
return updateDeferredValueImpl(hook, prevValue, value, initialValue);
26642664
}
26652665
}
26662666

2667-
function updateDeferredValueImpl<T>(hook: Hook, prevValue: T, value: T): T {
2667+
function updateDeferredValueImpl<T>(
2668+
hook: Hook,
2669+
prevValue: T,
2670+
value: T,
2671+
initialValue: ?T,
2672+
): T {
26682673
const shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);
26692674
if (shouldDeferValue) {
26702675
// This is an urgent update. If the value has changed, keep using the
@@ -3633,10 +3638,10 @@ if (__DEV__) {
36333638
mountHookTypesDev();
36343639
return mountDebugValue(value, formatterFn);
36353640
},
3636-
useDeferredValue<T>(value: T): T {
3641+
useDeferredValue<T>(value: T, initialValue?: T): T {
36373642
currentHookNameInDev = 'useDeferredValue';
36383643
mountHookTypesDev();
3639-
return mountDeferredValue(value);
3644+
return mountDeferredValue(value, initialValue);
36403645
},
36413646
useTransition(): [boolean, (() => void) => void] {
36423647
currentHookNameInDev = 'useTransition';
@@ -3802,10 +3807,10 @@ if (__DEV__) {
38023807
updateHookTypesDev();
38033808
return mountDebugValue(value, formatterFn);
38043809
},
3805-
useDeferredValue<T>(value: T): T {
3810+
useDeferredValue<T>(value: T, initialValue?: T): T {
38063811
currentHookNameInDev = 'useDeferredValue';
38073812
updateHookTypesDev();
3808-
return mountDeferredValue(value);
3813+
return mountDeferredValue(value, initialValue);
38093814
},
38103815
useTransition(): [boolean, (() => void) => void] {
38113816
currentHookNameInDev = 'useTransition';
@@ -3975,10 +3980,10 @@ if (__DEV__) {
39753980
updateHookTypesDev();
39763981
return updateDebugValue(value, formatterFn);
39773982
},
3978-
useDeferredValue<T>(value: T): T {
3983+
useDeferredValue<T>(value: T, initialValue?: T): T {
39793984
currentHookNameInDev = 'useDeferredValue';
39803985
updateHookTypesDev();
3981-
return updateDeferredValue(value);
3986+
return updateDeferredValue(value, initialValue);
39823987
},
39833988
useTransition(): [boolean, (() => void) => void] {
39843989
currentHookNameInDev = 'useTransition';
@@ -4147,10 +4152,10 @@ if (__DEV__) {
41474152
updateHookTypesDev();
41484153
return updateDebugValue(value, formatterFn);
41494154
},
4150-
useDeferredValue<T>(value: T): T {
4155+
useDeferredValue<T>(value: T, initialValue?: T): T {
41514156
currentHookNameInDev = 'useDeferredValue';
41524157
updateHookTypesDev();
4153-
return rerenderDeferredValue(value);
4158+
return rerenderDeferredValue(value, initialValue);
41544159
},
41554160
useTransition(): [boolean, (() => void) => void] {
41564161
currentHookNameInDev = 'useTransition';
@@ -4331,11 +4336,11 @@ if (__DEV__) {
43314336
mountHookTypesDev();
43324337
return mountDebugValue(value, formatterFn);
43334338
},
4334-
useDeferredValue<T>(value: T): T {
4339+
useDeferredValue<T>(value: T, initialValue?: T): T {
43354340
currentHookNameInDev = 'useDeferredValue';
43364341
warnInvalidHookAccess();
43374342
mountHookTypesDev();
4338-
return mountDeferredValue(value);
4343+
return mountDeferredValue(value, initialValue);
43394344
},
43404345
useTransition(): [boolean, (() => void) => void] {
43414346
currentHookNameInDev = 'useTransition';
@@ -4529,11 +4534,11 @@ if (__DEV__) {
45294534
updateHookTypesDev();
45304535
return updateDebugValue(value, formatterFn);
45314536
},
4532-
useDeferredValue<T>(value: T): T {
4537+
useDeferredValue<T>(value: T, initialValue?: T): T {
45334538
currentHookNameInDev = 'useDeferredValue';
45344539
warnInvalidHookAccess();
45354540
updateHookTypesDev();
4536-
return updateDeferredValue(value);
4541+
return updateDeferredValue(value, initialValue);
45374542
},
45384543
useTransition(): [boolean, (() => void) => void] {
45394544
currentHookNameInDev = 'useTransition';
@@ -4727,11 +4732,11 @@ if (__DEV__) {
47274732
updateHookTypesDev();
47284733
return updateDebugValue(value, formatterFn);
47294734
},
4730-
useDeferredValue<T>(value: T): T {
4735+
useDeferredValue<T>(value: T, initialValue?: T): T {
47314736
currentHookNameInDev = 'useDeferredValue';
47324737
warnInvalidHookAccess();
47334738
updateHookTypesDev();
4734-
return rerenderDeferredValue(value);
4739+
return rerenderDeferredValue(value, initialValue);
47354740
},
47364741
useTransition(): [boolean, (() => void) => void] {
47374742
currentHookNameInDev = 'useTransition';

packages/react-reconciler/src/ReactInternalTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ export type Dispatcher = {
399399
deps: Array<mixed> | void | null,
400400
): void,
401401
useDebugValue<T>(value: T, formatterFn: ?(value: T) => mixed): void,
402-
useDeferredValue<T>(value: T): T,
402+
useDeferredValue<T>(value: T, initialValue?: T): T,
403403
useTransition(): [
404404
boolean,
405405
(callback: () => void, options?: StartTransitionOptions) => void,

packages/react-server/src/ReactFizzHooks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ function useSyncExternalStore<T>(
553553
return getServerSnapshot();
554554
}
555555

556-
function useDeferredValue<T>(value: T): T {
556+
function useDeferredValue<T>(value: T, initialValue?: T): T {
557557
resolveCurrentlyRenderingComponent();
558558
return value;
559559
}

packages/react/src/ReactHooks.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ export function useTransition(): [
181181
return dispatcher.useTransition();
182182
}
183183

184-
export function useDeferredValue<T>(value: T): T {
184+
export function useDeferredValue<T>(value: T, initialValue?: T): T {
185185
const dispatcher = resolveDispatcher();
186-
return dispatcher.useDeferredValue(value);
186+
return dispatcher.useDeferredValue(value, initialValue);
187187
}
188188

189189
export function useId(): string {

packages/shared/ReactFeatureFlags.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ export const useMicrotasksForSchedulingInFabric = false;
126126

127127
export const passChildrenWhenCloningPersistedNodes = false;
128128

129+
export const enableUseDeferredValueInitialArg = __EXPERIMENTAL__;
130+
129131
// -----------------------------------------------------------------------------
130132
// Chopping Block
131133
//

packages/shared/forks/ReactFeatureFlags.native-fb.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
8989
export const enableFizzExternalRuntime = false;
9090

9191
export const enableAsyncActions = false;
92+
export const enableUseDeferredValueInitialArg = true;
9293

9394
// Flow magic to verify the exports of this file match the original version.
9495
((((null: any): ExportsType): FeatureFlagsType): ExportsType);

packages/shared/forks/ReactFeatureFlags.native-oss.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const alwaysThrottleRetries = true;
8080

8181
export const useMicrotasksForSchedulingInFabric = false;
8282
export const passChildrenWhenCloningPersistedNodes = false;
83+
export const enableUseDeferredValueInitialArg = __EXPERIMENTAL__;
8384

8485
// Flow magic to verify the exports of this file match the original version.
8586
((((null: any): ExportsType): FeatureFlagsType): ExportsType);

packages/shared/forks/ReactFeatureFlags.test-renderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const alwaysThrottleRetries = true;
8080

8181
export const useMicrotasksForSchedulingInFabric = false;
8282
export const passChildrenWhenCloningPersistedNodes = false;
83+
export const enableUseDeferredValueInitialArg = __EXPERIMENTAL__;
8384

8485
// Flow magic to verify the exports of this file match the original version.
8586
((((null: any): ExportsType): FeatureFlagsType): ExportsType);

packages/shared/forks/ReactFeatureFlags.test-renderer.native.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export const alwaysThrottleRetries = true;
7777

7878
export const useMicrotasksForSchedulingInFabric = false;
7979
export const passChildrenWhenCloningPersistedNodes = false;
80+
export const enableUseDeferredValueInitialArg = __EXPERIMENTAL__;
8081

8182
// Flow magic to verify the exports of this file match the original version.
8283
((((null: any): ExportsType): FeatureFlagsType): ExportsType);

0 commit comments

Comments
 (0)