refactor(reactivity): simplify effect options
This commit is contained in:
parent
c6cbca25fe
commit
247c53672d
@ -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', () => {
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user