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()
}

View File

@ -27,10 +27,12 @@ export type ComponentObjectPropsOptions<P = Data> = {
export type Prop<T> = PropOptions<T> | PropType<T>
type DefaultFactory<T> = () => T | null | undefined
interface PropOptions<T = any> {
type?: PropType<T> | true | null
required?: boolean
default?: T | null | undefined | (() => T | null | undefined)
default?: T | DefaultFactory<T> | null | undefined
validator?(value: unknown): boolean
}