refactor: expose runner on computed
This commit is contained in:
parent
fa9b3df5ab
commit
9b50a5abb9
@ -1,5 +1,5 @@
|
|||||||
import { EMPTY_OBJ } from './utils'
|
import { EMPTY_OBJ } from './utils'
|
||||||
import { computed, ComputedGetter } from '@vue/observer'
|
import { computed, stop, ComputedGetter } from '@vue/observer'
|
||||||
import { Component, ComponentClass } from './component'
|
import { Component, ComponentClass } from './component'
|
||||||
import { ComponentComputedOptions } from './componentOptions'
|
import { ComponentComputedOptions } from './componentOptions'
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ export function teardownComputed(instance: Component) {
|
|||||||
const handles = instance._computedGetters
|
const handles = instance._computedGetters
|
||||||
if (handles !== null) {
|
if (handles !== null) {
|
||||||
for (const key in handles) {
|
for (const key in handles) {
|
||||||
handles[key].stop()
|
stop(handles[key].runner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { computed, observable, autorun } from '../src'
|
import { computed, observable, autorun, stop } from '../src'
|
||||||
|
|
||||||
describe('observer/computed', () => {
|
describe('observer/computed', () => {
|
||||||
it('should return updated value', () => {
|
it('should return updated value', () => {
|
||||||
@ -132,7 +132,7 @@ describe('observer/computed', () => {
|
|||||||
expect(dummy).toBe(undefined)
|
expect(dummy).toBe(undefined)
|
||||||
value.foo = 1
|
value.foo = 1
|
||||||
expect(dummy).toBe(1)
|
expect(dummy).toBe(1)
|
||||||
cValue.stop()
|
stop(cValue.runner)
|
||||||
value.foo = 2
|
value.foo = 2
|
||||||
expect(dummy).toBe(1)
|
expect(dummy).toBe(1)
|
||||||
})
|
})
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { autorun, stop } from './index'
|
import { autorun } from './index'
|
||||||
import { Autorun, activeAutorunStack } from './autorun'
|
import { Autorun, activeAutorunStack } from './autorun'
|
||||||
|
|
||||||
export interface ComputedGetter {
|
export interface ComputedGetter {
|
||||||
(): any
|
(): any
|
||||||
stop: () => void
|
runner: Autorun
|
||||||
}
|
}
|
||||||
|
|
||||||
export function computed(getter: Function, context?: any): ComputedGetter {
|
export function computed(getter: Function, context?: any): ComputedGetter {
|
||||||
@ -15,8 +15,6 @@ export function computed(getter: Function, context?: any): ComputedGetter {
|
|||||||
dirty = true
|
dirty = true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// mark runner as computed so that it gets priority during trigger
|
|
||||||
runner.computed = true
|
|
||||||
const computedGetter = (() => {
|
const computedGetter = (() => {
|
||||||
if (dirty) {
|
if (dirty) {
|
||||||
value = runner()
|
value = runner()
|
||||||
@ -28,7 +26,10 @@ export function computed(getter: Function, context?: any): ComputedGetter {
|
|||||||
trackChildRun(runner)
|
trackChildRun(runner)
|
||||||
return value
|
return value
|
||||||
}) as ComputedGetter
|
}) 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
|
return computedGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user