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'
const handles = instance._computedGetters
if (handles !== null) {
for (const key in handles) {
- handles[key].stop()
+ stop(handles[key].runner)
}
}
}
-import { computed, observable, autorun } from '../src'
+import { computed, observable, autorun, stop } from '../src'
describe('observer/computed', () => {
it('should return updated value', () => {
expect(dummy).toBe(undefined)
value.foo = 1
expect(dummy).toBe(1)
- cValue.stop()
+ stop(cValue.runner)
value.foo = 2
expect(dummy).toBe(1)
})
-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 {
dirty = true
}
})
- // mark runner as computed so that it gets priority during trigger
- runner.computed = true
const computedGetter = (() => {
if (dirty) {
value = runner()
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
}