@@ -222,7 +222,12 @@ function doWatch(
222
222
223
223
const instance =
224
224
getCurrentScope ( ) === currentInstance ?. scope ? currentInstance : null
225
- // const instance = currentInstance
225
+ const reactiveGetter = ( source : object ) =>
226
+ deep === true
227
+ ? source // traverse will happen in wrapped getter below
228
+ : // for shallow or deep: false, only traverse root-level properties
229
+ traverse ( source , isShallow ( source ) || deep === false ? 1 : undefined )
230
+
226
231
let getter : ( ) => any
227
232
let forceTrigger = false
228
233
let isMultiSource = false
@@ -231,10 +236,7 @@ function doWatch(
231
236
getter = ( ) => source . value
232
237
forceTrigger = isShallow ( source )
233
238
} else if ( isReactive ( source ) ) {
234
- getter =
235
- isShallow ( source ) || deep === false
236
- ? ( ) => traverse ( source , 1 )
237
- : ( ) => traverse ( source )
239
+ getter = ( ) => reactiveGetter ( source )
238
240
forceTrigger = true
239
241
} else if ( isArray ( source ) ) {
240
242
isMultiSource = true
@@ -244,7 +246,7 @@ function doWatch(
244
246
if ( isRef ( s ) ) {
245
247
return s . value
246
248
} else if ( isReactive ( s ) ) {
247
- return traverse ( s , isShallow ( s ) || deep === false ? 1 : undefined )
249
+ return reactiveGetter ( s )
248
250
} else if ( isFunction ( s ) ) {
249
251
return callWithErrorHandling ( s , instance , ErrorCodes . WATCH_GETTER )
250
252
} else {
0 commit comments