refactor(reactivity): simplify effect options

This commit is contained in:
Evan You
2019-10-30 11:11:23 -04:00
parent c6cbca25fe
commit 247c53672d
3 changed files with 17 additions and 22 deletions

View File

@@ -677,12 +677,13 @@ describe('reactivity/effect', () => {
})
it('events: onStop', () => {
const onStop = jest.fn()
const runner = effect(() => {}, {
onStop: jest.fn()
onStop
})
stop(runner)
expect(runner.onStop).toHaveBeenCalled()
expect(onStop).toHaveBeenCalled()
})
it('markNonReactive', () => {

View File

@@ -8,11 +8,7 @@ export interface ReactiveEffect<T = any> {
active: boolean
raw: () => T
deps: Array<Dep>
computed?: boolean
scheduler?: (run: Function) => void
onTrack?: (event: DebuggerEvent) => void
onTrigger?: (event: DebuggerEvent) => void
onStop?: () => void
options: ReactiveEffectOptions
}
export interface ReactiveEffectOptions {
@@ -62,8 +58,8 @@ export function effect<T = any>(
export function stop(effect: ReactiveEffect) {
if (effect.active) {
cleanup(effect)
if (effect.onStop) {
effect.onStop()
if (effect.options.onStop) {
effect.options.onStop()
}
effect.active = false
}
@@ -79,12 +75,8 @@ function createReactiveEffect<T = any>(
effect._isEffect = true
effect.active = true
effect.raw = fn
effect.scheduler = options.scheduler
effect.onTrack = options.onTrack
effect.onTrigger = options.onTrigger
effect.onStop = options.onStop
effect.computed = options.computed
effect.deps = []
effect.options = options
return effect
}
@@ -142,8 +134,8 @@ export function track(target: object, type: OperationTypes, key?: unknown) {
if (!dep.has(effect)) {
dep.add(effect)
effect.deps.push(dep)
if (__DEV__ && effect.onTrack) {
effect.onTrack({
if (__DEV__ && effect.options.onTrack) {
effect.options.onTrack({
effect,
target,
type,
@@ -198,7 +190,7 @@ function addRunners(
) {
if (effectsToAdd !== void 0) {
effectsToAdd.forEach(effect => {
if (effect.computed) {
if (effect.options.computed) {
computedRunners.add(effect)
} else {
effects.add(effect)
@@ -214,17 +206,17 @@ function scheduleRun(
key: unknown,
extraInfo?: DebuggerEventExtraInfo
) {
if (__DEV__ && effect.onTrigger) {
if (__DEV__ && effect.options.onTrigger) {
const event: DebuggerEvent = {
effect,
target,
key,
type
}
effect.onTrigger(extraInfo ? extend(event, extraInfo) : event)
effect.options.onTrigger(extraInfo ? extend(event, extraInfo) : event)
}
if (effect.scheduler !== void 0) {
effect.scheduler(effect)
if (effect.options.scheduler !== void 0) {
effect.options.scheduler(effect)
} else {
effect()
}