refactor(reactivity): simplify effect options
This commit is contained in:
parent
c6cbca25fe
commit
247c53672d
@ -677,12 +677,13 @@ describe('reactivity/effect', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('events: onStop', () => {
|
it('events: onStop', () => {
|
||||||
|
const onStop = jest.fn()
|
||||||
const runner = effect(() => {}, {
|
const runner = effect(() => {}, {
|
||||||
onStop: jest.fn()
|
onStop
|
||||||
})
|
})
|
||||||
|
|
||||||
stop(runner)
|
stop(runner)
|
||||||
expect(runner.onStop).toHaveBeenCalled()
|
expect(onStop).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('markNonReactive', () => {
|
it('markNonReactive', () => {
|
||||||
|
@ -8,11 +8,7 @@ export interface ReactiveEffect<T = any> {
|
|||||||
active: boolean
|
active: boolean
|
||||||
raw: () => T
|
raw: () => T
|
||||||
deps: Array<Dep>
|
deps: Array<Dep>
|
||||||
computed?: boolean
|
options: ReactiveEffectOptions
|
||||||
scheduler?: (run: Function) => void
|
|
||||||
onTrack?: (event: DebuggerEvent) => void
|
|
||||||
onTrigger?: (event: DebuggerEvent) => void
|
|
||||||
onStop?: () => void
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReactiveEffectOptions {
|
export interface ReactiveEffectOptions {
|
||||||
@ -62,8 +58,8 @@ export function effect<T = any>(
|
|||||||
export function stop(effect: ReactiveEffect) {
|
export function stop(effect: ReactiveEffect) {
|
||||||
if (effect.active) {
|
if (effect.active) {
|
||||||
cleanup(effect)
|
cleanup(effect)
|
||||||
if (effect.onStop) {
|
if (effect.options.onStop) {
|
||||||
effect.onStop()
|
effect.options.onStop()
|
||||||
}
|
}
|
||||||
effect.active = false
|
effect.active = false
|
||||||
}
|
}
|
||||||
@ -79,12 +75,8 @@ function createReactiveEffect<T = any>(
|
|||||||
effect._isEffect = true
|
effect._isEffect = true
|
||||||
effect.active = true
|
effect.active = true
|
||||||
effect.raw = fn
|
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.deps = []
|
||||||
|
effect.options = options
|
||||||
return effect
|
return effect
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,8 +134,8 @@ export function track(target: object, type: OperationTypes, key?: unknown) {
|
|||||||
if (!dep.has(effect)) {
|
if (!dep.has(effect)) {
|
||||||
dep.add(effect)
|
dep.add(effect)
|
||||||
effect.deps.push(dep)
|
effect.deps.push(dep)
|
||||||
if (__DEV__ && effect.onTrack) {
|
if (__DEV__ && effect.options.onTrack) {
|
||||||
effect.onTrack({
|
effect.options.onTrack({
|
||||||
effect,
|
effect,
|
||||||
target,
|
target,
|
||||||
type,
|
type,
|
||||||
@ -198,7 +190,7 @@ function addRunners(
|
|||||||
) {
|
) {
|
||||||
if (effectsToAdd !== void 0) {
|
if (effectsToAdd !== void 0) {
|
||||||
effectsToAdd.forEach(effect => {
|
effectsToAdd.forEach(effect => {
|
||||||
if (effect.computed) {
|
if (effect.options.computed) {
|
||||||
computedRunners.add(effect)
|
computedRunners.add(effect)
|
||||||
} else {
|
} else {
|
||||||
effects.add(effect)
|
effects.add(effect)
|
||||||
@ -214,17 +206,17 @@ function scheduleRun(
|
|||||||
key: unknown,
|
key: unknown,
|
||||||
extraInfo?: DebuggerEventExtraInfo
|
extraInfo?: DebuggerEventExtraInfo
|
||||||
) {
|
) {
|
||||||
if (__DEV__ && effect.onTrigger) {
|
if (__DEV__ && effect.options.onTrigger) {
|
||||||
const event: DebuggerEvent = {
|
const event: DebuggerEvent = {
|
||||||
effect,
|
effect,
|
||||||
target,
|
target,
|
||||||
key,
|
key,
|
||||||
type
|
type
|
||||||
}
|
}
|
||||||
effect.onTrigger(extraInfo ? extend(event, extraInfo) : event)
|
effect.options.onTrigger(extraInfo ? extend(event, extraInfo) : event)
|
||||||
}
|
}
|
||||||
if (effect.scheduler !== void 0) {
|
if (effect.options.scheduler !== void 0) {
|
||||||
effect.scheduler(effect)
|
effect.options.scheduler(effect)
|
||||||
} else {
|
} else {
|
||||||
effect()
|
effect()
|
||||||
}
|
}
|
||||||
|
@ -27,10 +27,12 @@ export type ComponentObjectPropsOptions<P = Data> = {
|
|||||||
|
|
||||||
export type Prop<T> = PropOptions<T> | PropType<T>
|
export type Prop<T> = PropOptions<T> | PropType<T>
|
||||||
|
|
||||||
|
type DefaultFactory<T> = () => T | null | undefined
|
||||||
|
|
||||||
interface PropOptions<T = any> {
|
interface PropOptions<T = any> {
|
||||||
type?: PropType<T> | true | null
|
type?: PropType<T> | true | null
|
||||||
required?: boolean
|
required?: boolean
|
||||||
default?: T | null | undefined | (() => T | null | undefined)
|
default?: T | DefaultFactory<T> | null | undefined
|
||||||
validator?(value: unknown): boolean
|
validator?(value: unknown): boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user