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 6
6
getCurrentInstance ,
7
7
inject ,
8
8
nextTick ,
9
+ onRenderTracked ,
10
+ onRenderTriggered ,
9
11
onUpdated ,
10
12
provide ,
11
13
ref ,
@@ -112,4 +114,47 @@ describe('apiLifecycle', () => {
112
114
expect ( handleUpdated ) . toHaveBeenCalledTimes ( 1 )
113
115
expect ( handleUpdatedChild ) . toHaveBeenCalledTimes ( 1 )
114
116
} )
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
+ } )
115
160
} )
Original file line number Diff line number Diff line change @@ -4,7 +4,11 @@ import {
4
4
setCurrentInstance ,
5
5
} from './component'
6
6
import { warn } from './warning'
7
- import { pauseTracking , resetTracking } from '@vue/reactivity'
7
+ import {
8
+ type DebuggerEvent ,
9
+ pauseTracking ,
10
+ resetTracking ,
11
+ } from '@vue/reactivity'
8
12
import { ErrorTypeStrings , callWithAsyncErrorHandling } from './errorHandling'
9
13
import { toHandlerKey } from '@vue/shared'
10
14
@@ -77,6 +81,14 @@ export const onUpdated = createHook(VaporLifecycleHooks.UPDATED)
77
81
export const onBeforeUnmount = createHook ( VaporLifecycleHooks . BEFORE_UNMOUNT )
78
82
export const onUnmounted = createHook ( VaporLifecycleHooks . UNMOUNTED )
79
83
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
+
80
92
export type ErrorCapturedHook < TError = unknown > = (
81
93
err : TError ,
82
94
instance : ComponentInternalInstance | null ,
Original file line number Diff line number Diff line change @@ -106,8 +106,8 @@ export {
106
106
onUnmounted ,
107
107
// onActivated,
108
108
// onDeactivated,
109
- // onRenderTracked,
110
- // onRenderTriggered,
109
+ onRenderTracked ,
110
+ onRenderTriggered ,
111
111
onErrorCaptured ,
112
112
// onServerPrefetch,
113
113
} from './apiLifecycle'
Original file line number Diff line number Diff line change @@ -18,7 +18,6 @@ import { invokeDirectiveHook } from './directives'
18
18
export function renderEffect ( cb : ( ) => void ) {
19
19
const instance = getCurrentInstance ( )
20
20
const scope = getCurrentScope ( )
21
-
22
21
let effect : ReactiveEffect
23
22
24
23
const job : SchedulerJob = ( ) => {
@@ -77,7 +76,14 @@ export function renderEffect(cb: () => void) {
77
76
if ( instance ) job . id = instance . uid
78
77
queueJob ( job )
79
78
}
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
+ }
81
87
effect . run ( )
82
88
}
83
89
Original file line number Diff line number Diff line change 7
7
getCurrentInstance ,
8
8
onBeforeUpdate ,
9
9
onUpdated ,
10
+ onRenderTracked ,
11
+ onRenderTriggered ,
10
12
} from ' vue/vapor'
11
13
12
14
const instance = getCurrentInstance ()!
@@ -36,6 +38,13 @@ onUpdated(() => {
36
38
console .log (' updated' )
37
39
})
38
40
41
+ onRenderTracked (e => {
42
+ console .log (` Render Tracked: ` , e .target )
43
+ })
44
+ onRenderTriggered (e => {
45
+ console .log (` Render trigger: ` , e .target )
46
+ })
47
+
39
48
const log = (arg : any ) => {
40
49
console .log (' callback in render effect' )
41
50
return arg
You can’t perform that action at this time.
0 commit comments