})
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', () => {
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 {
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
}
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
}
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,
) {
if (effectsToAdd !== void 0) {
effectsToAdd.forEach(effect => {
- if (effect.computed) {
+ if (effect.options.computed) {
computedRunners.add(effect)
} else {
effects.add(effect)
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()
}
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
}