@@ -74,7 +74,8 @@ export interface WatchOptionsBase extends DebuggerOptions {
74
74
75
75
export interface WatchOptions < Immediate = boolean > extends WatchOptionsBase {
76
76
immediate ?: Immediate
77
- deep ?: boolean | number
77
+ deep ?: boolean
78
+ depth ?: number
78
79
}
79
80
80
81
export type WatchStopHandle = ( ) => void
@@ -172,7 +173,14 @@ export function watch<T = any, Immediate extends Readonly<boolean> = false>(
172
173
function doWatch (
173
174
source : WatchSource | WatchSource [ ] | WatchEffect | object ,
174
175
cb : WatchCallback | null ,
175
- { immediate, deep, flush, onTrack, onTrigger } : WatchOptions = EMPTY_OBJ
176
+ {
177
+ immediate,
178
+ deep,
179
+ flush,
180
+ depth,
181
+ onTrack,
182
+ onTrigger
183
+ } : WatchOptions = EMPTY_OBJ
176
184
) : WatchStopHandle {
177
185
if ( __DEV__ && ! cb ) {
178
186
if ( immediate !== undefined ) {
@@ -270,7 +278,7 @@ function doWatch(
270
278
271
279
if ( cb && deep ) {
272
280
const baseGetter = getter
273
- getter = ( ) => traverse ( baseGetter ( ) , deep )
281
+ getter = ( ) => traverse ( baseGetter ( ) , depth )
274
282
}
275
283
276
284
let cleanup : ( ) => void
@@ -439,16 +447,16 @@ export function createPathGetter(ctx: any, path: string) {
439
447
440
448
export function traverse (
441
449
value : unknown ,
442
- deep ?: boolean | number ,
450
+ depth ?: number ,
443
451
currentDepth = 0 ,
444
452
seen ?: Set < unknown >
445
453
) {
446
454
if ( ! isObject ( value ) || ( value as any ) [ ReactiveFlags . SKIP ] ) {
447
455
return value
448
456
}
449
457
450
- if ( typeof deep === 'number' ) {
451
- if ( currentDepth >= deep ) {
458
+ if ( depth && depth > 0 ) {
459
+ if ( currentDepth >= depth ) {
452
460
return value
453
461
}
454
462
currentDepth ++
@@ -460,18 +468,18 @@ export function traverse(
460
468
}
461
469
seen . add ( value )
462
470
if ( isRef ( value ) ) {
463
- traverse ( value . value , deep , currentDepth , seen )
471
+ traverse ( value . value , depth , currentDepth , seen )
464
472
} else if ( isArray ( value ) ) {
465
473
for ( let i = 0 ; i < value . length ; i ++ ) {
466
- traverse ( value [ i ] , deep , currentDepth , seen )
474
+ traverse ( value [ i ] , depth , currentDepth , seen )
467
475
}
468
476
} else if ( isSet ( value ) || isMap ( value ) ) {
469
477
value . forEach ( ( v : any ) => {
470
- traverse ( v , deep , currentDepth , seen )
478
+ traverse ( v , depth , currentDepth , seen )
471
479
} )
472
480
} else if ( isPlainObject ( value ) ) {
473
481
for ( const key in value ) {
474
- traverse ( value [ key ] , deep , currentDepth , seen )
482
+ traverse ( value [ key ] , depth , currentDepth , seen )
475
483
}
476
484
}
477
485
return value
0 commit comments