Skip to content

Commit 2d56816

Browse files
refactor: simplify traverse() for deep watchers (#10795)
1 parent b01be66 commit 2d56816

File tree

1 file changed

+7
-14
lines changed

1 file changed

+7
-14
lines changed

packages/runtime-core/src/apiWatch.ts

+7-14
Original file line numberDiff line numberDiff line change
@@ -466,39 +466,32 @@ export function createPathGetter(ctx: any, path: string) {
466466

467467
export function traverse(
468468
value: unknown,
469-
depth?: number,
470-
currentDepth = 0,
469+
depth = Infinity,
471470
seen?: Set<unknown>,
472471
) {
473-
if (!isObject(value) || (value as any)[ReactiveFlags.SKIP]) {
472+
if (depth <= 0 || !isObject(value) || (value as any)[ReactiveFlags.SKIP]) {
474473
return value
475474
}
476475

477-
if (depth && depth > 0) {
478-
if (currentDepth >= depth) {
479-
return value
480-
}
481-
currentDepth++
482-
}
483-
484476
seen = seen || new Set()
485477
if (seen.has(value)) {
486478
return value
487479
}
488480
seen.add(value)
481+
depth--
489482
if (isRef(value)) {
490-
traverse(value.value, depth, currentDepth, seen)
483+
traverse(value.value, depth, seen)
491484
} else if (isArray(value)) {
492485
for (let i = 0; i < value.length; i++) {
493-
traverse(value[i], depth, currentDepth, seen)
486+
traverse(value[i], depth, seen)
494487
}
495488
} else if (isSet(value) || isMap(value)) {
496489
value.forEach((v: any) => {
497-
traverse(v, depth, currentDepth, seen)
490+
traverse(v, depth, seen)
498491
})
499492
} else if (isPlainObject(value)) {
500493
for (const key in value) {
501-
traverse(value[key], depth, currentDepth, seen)
494+
traverse(value[key], depth, seen)
502495
}
503496
}
504497
return value

0 commit comments

Comments
 (0)