This repository was archived by the owner on Jul 19, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +77
-5
lines changed
Expand file tree Collapse file tree 5 files changed +77
-5
lines changed Original file line number Diff line number Diff line change 66 getCurrentInstance ,
77 inject ,
88 nextTick ,
9+ onRenderTracked ,
10+ onRenderTriggered ,
911 onUpdated ,
1012 provide ,
1113 ref ,
@@ -112,4 +114,47 @@ describe('apiLifecycle', () => {
112114 expect ( handleUpdated ) . toHaveBeenCalledTimes ( 1 )
113115 expect ( handleUpdatedChild ) . toHaveBeenCalledTimes ( 1 )
114116 } )
117+
118+ test ( 'onRenderTracked' , async ( ) => {
119+ const onTrackedFn = vi . fn ( )
120+ const count = ref ( 0 )
121+ const { host, render } = define ( {
122+ setup ( ) {
123+ onRenderTracked ( onTrackedFn )
124+ return ( ( ) => {
125+ const n0 = createTextNode ( )
126+ renderEffect ( ( ) => {
127+ setText ( n0 , count . value )
128+ } )
129+ return n0
130+ } ) ( )
131+ } ,
132+ } )
133+ render ( )
134+ await nextTick ( )
135+ expect ( onTrackedFn ) . toBeCalled ( )
136+ expect ( host . innerHTML ) . toBe ( '0' )
137+ } )
138+ test ( 'onRenderTrigger' , async ( ) => {
139+ const onRenderTriggerFn = vi . fn ( )
140+ const count = ref ( 0 )
141+ const { host, render } = define ( {
142+ setup ( ) {
143+ onRenderTriggered ( onRenderTriggerFn )
144+ return ( ( ) => {
145+ const n0 = createTextNode ( )
146+ renderEffect ( ( ) => {
147+ setText ( n0 , count . value )
148+ } )
149+ return n0
150+ } ) ( )
151+ } ,
152+ } )
153+ render ( )
154+ count . value ++
155+ await nextTick ( )
156+ expect ( onRenderTriggerFn ) . toBeCalled ( )
157+ expect ( onRenderTriggerFn ) . toHaveBeenCalledOnce ( )
158+ expect ( host . innerHTML ) . toBe ( '1' )
159+ } )
115160} )
Original file line number Diff line number Diff line change @@ -4,7 +4,11 @@ import {
44 setCurrentInstance ,
55} from './component'
66import { warn } from './warning'
7- import { pauseTracking , resetTracking } from '@vue/reactivity'
7+ import {
8+ type DebuggerEvent ,
9+ pauseTracking ,
10+ resetTracking ,
11+ } from '@vue/reactivity'
812import { ErrorTypeStrings , callWithAsyncErrorHandling } from './errorHandling'
913import { toHandlerKey } from '@vue/shared'
1014
@@ -77,6 +81,14 @@ export const onUpdated = createHook(VaporLifecycleHooks.UPDATED)
7781export const onBeforeUnmount = createHook ( VaporLifecycleHooks . BEFORE_UNMOUNT )
7882export const onUnmounted = createHook ( VaporLifecycleHooks . UNMOUNTED )
7983
84+ export type DebuggerHook = ( e : DebuggerEvent ) => void
85+ export const onRenderTriggered = createHook < DebuggerHook > (
86+ VaporLifecycleHooks . RENDER_TRIGGERED ,
87+ )
88+ export const onRenderTracked = createHook < DebuggerHook > (
89+ VaporLifecycleHooks . RENDER_TRACKED ,
90+ )
91+
8092export type ErrorCapturedHook < TError = unknown > = (
8193 err : TError ,
8294 instance : ComponentInternalInstance | null ,
Original file line number Diff line number Diff line change @@ -106,8 +106,8 @@ export {
106106 onUnmounted ,
107107 // onActivated,
108108 // onDeactivated,
109- // onRenderTracked,
110- // onRenderTriggered,
109+ onRenderTracked ,
110+ onRenderTriggered ,
111111 onErrorCaptured ,
112112 // onServerPrefetch,
113113} from './apiLifecycle'
Original file line number Diff line number Diff line change @@ -18,7 +18,6 @@ import { invokeDirectiveHook } from './directives'
1818export function renderEffect ( cb : ( ) => void ) {
1919 const instance = getCurrentInstance ( )
2020 const scope = getCurrentScope ( )
21-
2221 let effect : ReactiveEffect
2322
2423 const job : SchedulerJob = ( ) => {
@@ -77,7 +76,14 @@ export function renderEffect(cb: () => void) {
7776 if ( instance ) job . id = instance . uid
7877 queueJob ( job )
7978 }
80-
79+ if ( __DEV__ ) {
80+ effect . onTrack = instance ?. rtc
81+ ? e => invokeArrayFns ( instance . rtc ! , e )
82+ : void 0
83+ effect . onTrigger = instance ?. rtg
84+ ? e => invokeArrayFns ( instance . rtg ! , e )
85+ : void 0
86+ }
8187 effect . run ( )
8288}
8389
Original file line number Diff line number Diff line change 77 getCurrentInstance ,
88 onBeforeUpdate ,
99 onUpdated ,
10+ onRenderTracked ,
11+ onRenderTriggered ,
1012} from ' vue/vapor'
1113
1214const instance = getCurrentInstance ()!
@@ -36,6 +38,13 @@ onUpdated(() => {
3638 console .log (' updated' )
3739})
3840
41+ onRenderTracked (e => {
42+ console .log (` Render Tracked: ` , e .target )
43+ })
44+ onRenderTriggered (e => {
45+ console .log (` Render trigger: ` , e .target )
46+ })
47+
3948const log = (arg : any ) => {
4049 console .log (' callback in render effect' )
4150 return arg
You can’t perform that action at this time.
0 commit comments