@@ -39,6 +39,7 @@ type CurrentDispatcherRef = typeof ReactSharedInternals.ReactCurrentDispatcher;
3939// Used to track hooks called during a render
4040
4141type HookLogEntry = {
42+ displayName : string | null ,
4243 primitive : string ,
4344 stackError : Error ,
4445 value : mixed ,
@@ -171,6 +172,7 @@ function use<T>(usable: Usable<T>): T {
171172 case 'fulfilled' : {
172173 const fulfilledValue : T = thenable . value ;
173174 hookLog . push ( {
175+ displayName : null ,
174176 primitive : 'Promise' ,
175177 stackError : new Error ( ) ,
176178 value : fulfilledValue ,
@@ -187,6 +189,7 @@ function use<T>(usable: Usable<T>): T {
187189 // If this was an uncached Promise we have to abandon this attempt
188190 // but we can still emit anything up until this point.
189191 hookLog.push({
192+ displayName : null ,
190193 primitive : 'Unresolved' ,
191194 stackError : new Error ( ) ,
192195 value : thenable ,
@@ -199,6 +202,7 @@ function use<T>(usable: Usable<T>): T {
199202 const value = readContext ( context ) ;
200203
201204 hookLog . push ( {
205+ displayName : context . displayName || 'Context' ,
202206 primitive : 'Context (use)' ,
203207 stackError : new Error ( ) ,
204208 value,
@@ -215,6 +219,7 @@ function use<T>(usable: Usable<T>): T {
215219
216220function useContext < T > (context: ReactContext< T > ): T {
217221 hookLog . push ( {
222+ displayName : context . displayName || null ,
218223 primitive : 'Context' ,
219224 stackError : new Error ( ) ,
220225 value : context . _currentValue ,
@@ -235,6 +240,7 @@ function useState<S>(
235240 initialState ( )
236241 : initialState ;
237242 hookLog . push ( {
243+ displayName : null ,
238244 primitive : 'State' ,
239245 stackError : new Error ( ) ,
240246 value : state ,
@@ -256,6 +262,7 @@ function useReducer<S, I, A>(
256262 state = init !== undefined ? init ( initialArg ) : ( ( initialArg : any ) : S ) ;
257263 }
258264 hookLog . push ( {
265+ displayName : null ,
259266 primitive : 'Reducer' ,
260267 stackError : new Error ( ) ,
261268 value : state ,
@@ -268,6 +275,7 @@ function useRef<T>(initialValue: T): {current: T} {
268275 const hook = nextHook ( ) ;
269276 const ref = hook !== null ? hook . memoizedState : { current : initialValue } ;
270277 hookLog . push ( {
278+ displayName : null ,
271279 primitive : 'Ref' ,
272280 stackError : new Error ( ) ,
273281 value : ref . current ,
@@ -279,6 +287,7 @@ function useRef<T>(initialValue: T): {current: T} {
279287function useCacheRefresh(): () => void {
280288 const hook = nextHook ( ) ;
281289 hookLog . push ( {
290+ displayName : null ,
282291 primitive : 'CacheRefresh' ,
283292 stackError : new Error ( ) ,
284293 value : hook !== null ? hook . memoizedState : function refresh ( ) { } ,
@@ -293,6 +302,7 @@ function useLayoutEffect(
293302): void {
294303 nextHook ( ) ;
295304 hookLog . push ( {
305+ displayName : null ,
296306 primitive : 'LayoutEffect' ,
297307 stackError : new Error ( ) ,
298308 value : create ,
@@ -306,6 +316,7 @@ function useInsertionEffect(
306316): void {
307317 nextHook ( ) ;
308318 hookLog . push ( {
319+ displayName : null ,
309320 primitive : 'InsertionEffect' ,
310321 stackError : new Error ( ) ,
311322 value : create ,
@@ -319,6 +330,7 @@ function useEffect(
319330): void {
320331 nextHook ( ) ;
321332 hookLog . push ( {
333+ displayName : null ,
322334 primitive : 'Effect' ,
323335 stackError : new Error ( ) ,
324336 value : create ,
@@ -341,6 +353,7 @@ function useImperativeHandle<T>(
341353 instance = ref . current ;
342354 }
343355 hookLog.push({
356+ displayName : null ,
344357 primitive : 'ImperativeHandle' ,
345358 stackError : new Error ( ) ,
346359 value : instance ,
@@ -350,6 +363,7 @@ function useImperativeHandle<T>(
350363
351364function useDebugValue ( value : any , formatterFn : ?( value : any ) => any ) {
352365 hookLog . push ( {
366+ displayName : null ,
353367 primitive : 'DebugValue' ,
354368 stackError : new Error ( ) ,
355369 value : typeof formatterFn === 'function' ? formatterFn ( value ) : value ,
@@ -360,6 +374,7 @@ function useDebugValue(value: any, formatterFn: ?(value: any) => any) {
360374function useCallback< T > (callback: T, inputs: Array< mixed > | void | null): T {
361375 const hook = nextHook ( ) ;
362376 hookLog . push ( {
377+ displayName : null ,
363378 primitive : 'Callback' ,
364379 stackError : new Error ( ) ,
365380 value : hook !== null ? hook . memoizedState [ 0 ] : callback ,
@@ -375,6 +390,7 @@ function useMemo<T>(
375390 const hook = nextHook ( ) ;
376391 const value = hook !== null ? hook . memoizedState [ 0 ] : nextCreate ( ) ;
377392 hookLog . push ( {
393+ displayName : null ,
378394 primitive : 'Memo' ,
379395 stackError : new Error ( ) ,
380396 value,
@@ -395,6 +411,7 @@ function useSyncExternalStore<T>(
395411 nextHook ( ) ; // Effect
396412 const value = getSnapshot ( ) ;
397413 hookLog . push ( {
414+ displayName : null ,
398415 primitive : 'SyncExternalStore' ,
399416 stackError : new Error ( ) ,
400417 value,
@@ -413,6 +430,7 @@ function useTransition(): [
413430 nextHook ( ) ; // State
414431 nextHook ( ) ; // Callback
415432 hookLog . push ( {
433+ displayName : null ,
416434 primitive : 'Transition' ,
417435 stackError : new Error ( ) ,
418436 value : undefined ,
@@ -424,6 +442,7 @@ function useTransition(): [
424442function useDeferredValue< T > (value: T, initialValue?: T): T {
425443 const hook = nextHook ( ) ;
426444 hookLog . push ( {
445+ displayName : null ,
427446 primitive : 'DeferredValue' ,
428447 stackError : new Error ( ) ,
429448 value : hook !== null ? hook . memoizedState : value ,
@@ -436,6 +455,7 @@ function useId(): string {
436455 const hook = nextHook ( ) ;
437456 const id = hook !== null ? hook . memoizedState : '' ;
438457 hookLog . push ( {
458+ displayName : null ,
439459 primitive : 'Id' ,
440460 stackError : new Error ( ) ,
441461 value : id ,
@@ -485,6 +505,7 @@ function useOptimistic<S, A>(
485505 state = passthrough ;
486506 }
487507 hookLog . push ( {
508+ displayName : null ,
488509 primitive : 'Optimistic' ,
489510 stackError : new Error ( ) ,
490511 value : state ,
@@ -507,6 +528,7 @@ function useFormState<S, P>(
507528 state = initialState ;
508529 }
509530 hookLog.push({
531+ displayName : null ,
510532 primitive : 'FormState' ,
511533 stackError : new Error ( ) ,
512534 value : state ,
@@ -780,7 +802,7 @@ function buildTree(
780802 }
781803 prevStack = stack ;
782804 }
783- const { primitive , debugInfo } = hook;
805+ const { displayName , primitive , debugInfo } = hook;
784806
785807 // For now, the "id" of stateful hooks is just the stateful hook index.
786808 // Custom hooks have no ids, nor do non-stateful native hooks (e.g. Context, DebugValue).
@@ -795,7 +817,7 @@ function buildTree(
795817
796818 // For the time being, only State and Reducer hooks support runtime overrides.
797819 const isStateEditable = primitive === 'Reducer' || primitive === 'State';
798- const name = primitive === 'Context (use)' ? 'Context' : primitive;
820+ const name = displayName || primitive;
799821 const levelChild: HooksNode = {
800822 id ,
801823 isStateEditable ,
0 commit comments