]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(watch): avoid traversing objects that are marked non-reactive
authorEvan You <yyx990803@gmail.com>
Wed, 2 Jun 2021 19:51:27 +0000 (15:51 -0400)
committerEvan You <yyx990803@gmail.com>
Wed, 2 Jun 2021 19:51:27 +0000 (15:51 -0400)
e.g. Vue public instances

packages/runtime-core/src/apiWatch.ts

index eaa699ce7b5f087e102e4d2259949195faab97e2..b7092248e24b1052a0ae535fa8e5d06b9af299e9 100644 (file)
@@ -5,7 +5,8 @@ import {
   Ref,
   ComputedRef,
   ReactiveEffectOptions,
-  isReactive
+  isReactive,
+  ReactiveFlags
 } from '@vue/reactivity'
 import { SchedulerJob, queuePreFlushCb } from './scheduler'
 import {
@@ -390,7 +391,11 @@ export function createPathGetter(ctx: any, path: string) {
 }
 
 function traverse(value: unknown, seen: Set<unknown> = new Set()) {
-  if (!isObject(value) || seen.has(value)) {
+  if (
+    !isObject(value) ||
+    seen.has(value) ||
+    (value as any)[ReactiveFlags.SKIP]
+  ) {
     return value
   }
   seen.add(value)