]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor: expose runner on computed
authorEvan You <yyx990803@gmail.com>
Thu, 20 Sep 2018 22:36:34 +0000 (18:36 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 20 Sep 2018 22:36:34 +0000 (18:36 -0400)
packages/core/src/componentComputed.ts
packages/observer/__tests__/computed.spec.ts
packages/observer/src/computed.ts

index ab88958bc6e26ca34d0e4c1200e5f57aee73f649..04d9ccd18f9c411fd0137f3a53d497bed0e8172f 100644 (file)
@@ -1,5 +1,5 @@
 import { EMPTY_OBJ } from './utils'
-import { computed, ComputedGetter } from '@vue/observer'
+import { computed, stop, ComputedGetter } from '@vue/observer'
 import { Component, ComponentClass } from './component'
 import { ComponentComputedOptions } from './componentOptions'
 
@@ -59,7 +59,7 @@ export function teardownComputed(instance: Component) {
   const handles = instance._computedGetters
   if (handles !== null) {
     for (const key in handles) {
-      handles[key].stop()
+      stop(handles[key].runner)
     }
   }
 }
index f969b65d76d11c058a25ffc1375f94d7442b97d6..973e3c0fdb895b77c8518ffbb78ddb3e82bcc48e 100644 (file)
@@ -1,4 +1,4 @@
-import { computed, observable, autorun } from '../src'
+import { computed, observable, autorun, stop } from '../src'
 
 describe('observer/computed', () => {
   it('should return updated value', () => {
@@ -132,7 +132,7 @@ describe('observer/computed', () => {
     expect(dummy).toBe(undefined)
     value.foo = 1
     expect(dummy).toBe(1)
-    cValue.stop()
+    stop(cValue.runner)
     value.foo = 2
     expect(dummy).toBe(1)
   })
index c4eb6e94532fc4685ebe38be5ce445cff1cdaac2..d63588d0e92b697017b3b072db2844512b971aa4 100644 (file)
@@ -1,9 +1,9 @@
-import { autorun, stop } from './index'
+import { autorun } from './index'
 import { Autorun, activeAutorunStack } from './autorun'
 
 export interface ComputedGetter {
   (): any
-  stop: () => void
+  runner: Autorun
 }
 
 export function computed(getter: Function, context?: any): ComputedGetter {
@@ -15,8 +15,6 @@ export function computed(getter: Function, context?: any): ComputedGetter {
       dirty = true
     }
   })
-  // mark runner as computed so that it gets priority during trigger
-  runner.computed = true
   const computedGetter = (() => {
     if (dirty) {
       value = runner()
@@ -28,7 +26,10 @@ export function computed(getter: Function, context?: any): ComputedGetter {
     trackChildRun(runner)
     return value
   }) as ComputedGetter
-  computedGetter.stop = () => stop(runner)
+  // expose runner so computed can be stopped
+  computedGetter.runner = runner
+  // mark runner as computed so that it gets priority during trigger
+  runner.computed = true
   return computedGetter
 }