diff --git a/src/core/instance/lifecycle.ts b/src/core/instance/lifecycle.ts index df70b7113fd..fec330ad5fc 100644 --- a/src/core/instance/lifecycle.ts +++ b/src/core/instance/lifecycle.ts @@ -209,6 +209,7 @@ export function mountComponent( // we set this to vm._watcher inside the watcher's constructor // since the watcher's initial patch may call $forceUpdate (e.g. inside child // component's mounted hook), which relies on vm._watcher being already defined + vm._scope.on() new Watcher( vm, updateComponent, @@ -216,6 +217,7 @@ export function mountComponent( watcherOptions, true /* isRenderWatcher */ ) + vm._scope.off() hydrating = false // flush buffer for flush: "pre" watchers queued in setup() diff --git a/src/core/observer/watcher.ts b/src/core/observer/watcher.ts index b1f491acb33..00bf19b9123 100644 --- a/src/core/observer/watcher.ts +++ b/src/core/observer/watcher.ts @@ -72,10 +72,8 @@ export default class Watcher implements DepTarget { isRenderWatcher?: boolean ) { recordEffectScope(this, activeEffectScope || (vm ? vm._scope : undefined)) - if ((this.vm = vm)) { - if (isRenderWatcher) { - vm._watcher = this - } + if ((this.vm = vm) && isRenderWatcher) { + vm._watcher = this } // options if (options) {