oldTarget?: Map<any, any> | Set<any>
}
-let activeEffect: ReactiveEffect | undefined
+export let activeEffect: ReactiveEffect | undefined
export const ITERATE_KEY = Symbol(__DEV__ ? 'iterate' : '')
export const MAP_KEY_ITERATE_KEY = Symbol(__DEV__ ? 'Map key iterate' : '')
runner.effect.stop()
}
-let shouldTrack = true
+export let shouldTrack = true
const trackStack: boolean[] = []
export function pauseTracking() {
}
export function track(target: object, type: TrackOpTypes, key: unknown) {
- if (!isTracking()) {
- return
- }
- let depsMap = targetMap.get(target)
- if (!depsMap) {
- targetMap.set(target, (depsMap = new Map()))
- }
- let dep = depsMap.get(key)
- if (!dep) {
- depsMap.set(key, (dep = createDep()))
- }
-
- const eventInfo = __DEV__
- ? { effect: activeEffect, target, type, key }
- : undefined
+ if (shouldTrack && activeEffect) {
+ let depsMap = targetMap.get(target)
+ if (!depsMap) {
+ targetMap.set(target, (depsMap = new Map()))
+ }
+ let dep = depsMap.get(key)
+ if (!dep) {
+ depsMap.set(key, (dep = createDep()))
+ }
- trackEffects(dep, eventInfo)
-}
+ const eventInfo = __DEV__
+ ? { effect: activeEffect, target, type, key }
+ : undefined
-export function isTracking() {
- return shouldTrack && !!activeEffect
+ trackEffects(dep, eventInfo)
+ }
}
export function trackEffects(
-import { isTracking, trackEffects, triggerEffects } from './effect'
+import {
+ activeEffect,
+ shouldTrack,
+ trackEffects,
+ triggerEffects
+} from './effect'
import { TrackOpTypes, TriggerOpTypes } from './operations'
import { isArray, hasChanged, IfAny } from '@vue/shared'
import { isProxy, toRaw, isReactive, toReactive } from './reactive'
}
export function trackRefValue(ref: RefBase<any>) {
- if (isTracking()) {
+ if (shouldTrack && activeEffect) {
ref = toRaw(ref)
- if (!ref.dep) {
- ref.dep = createDep()
- }
if (__DEV__) {
- trackEffects(ref.dep, {
+ trackEffects(ref.dep || (ref.dep = createDep()), {
target: ref,
type: TrackOpTypes.GET,
key: 'value'
})
} else {
- trackEffects(ref.dep)
+ trackEffects(ref.dep || (ref.dep = createDep()))
}
}
}