]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor: tweak watch getter logic
authorEvan You <yyx990803@gmail.com>
Thu, 30 May 2019 13:31:53 +0000 (21:31 +0800)
committerEvan You <yyx990803@gmail.com>
Thu, 30 May 2019 13:31:53 +0000 (21:31 +0800)
packages/runtime-core/src/reactivity.ts

index fa102b2f1c498bab0941bc79f7d3f353688e0224..30976be5c0365a9f2de06e5e3fb257191121f698 100644 (file)
@@ -33,6 +33,8 @@ import { currentInstance } from './component'
 import { queueJob, queuePostFlushCb } from './scheduler'
 import { EMPTY_OBJ, isObject, isArray } from '@vue/shared'
 
+// record effects created during a component's setup() so that they can be
+// stopped when the component unmounts
 function recordEffect(effect: ReactiveEffect) {
   if (currentInstance) {
     ;(currentInstance.effects || (currentInstance.effects = [])).push(effect)
@@ -71,11 +73,8 @@ export function watch<T>(
         ? queueJob
         : queuePostFlushCb
 
-  const traverseIfDeep = (getter: Function) =>
-    options.deep ? () => traverse(getter()) : getter
-  const getter = isValue(source)
-    ? traverseIfDeep(() => source.value)
-    : traverseIfDeep(source)
+  const baseGetter = isValue(source) ? () => source.value : source
+  const getter = options.deep ? () => traverse(baseGetter()) : baseGetter
 
   let oldValue: any
   const applyCb = cb