refactor(reactivity): separate track and trigger operation types
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { reactive, readonly, toRaw } from './reactive'
|
||||
import { OperationTypes } from './operations'
|
||||
import { track, trigger } from './effect'
|
||||
import { TrackOpTypes, TriggerOpTypes } from './operations'
|
||||
import { track, trigger, ITERATE_KEY } from './effect'
|
||||
import { LOCKED } from './lock'
|
||||
import { isObject, hasOwn, isSymbol, hasChanged } from '@vue/shared'
|
||||
import { isRef } from './ref'
|
||||
@@ -18,14 +18,14 @@ function createGetter(isReadonly: boolean, shallow = false) {
|
||||
return res
|
||||
}
|
||||
if (shallow) {
|
||||
track(target, OperationTypes.GET, key)
|
||||
track(target, TrackOpTypes.GET, key)
|
||||
// TODO strict mode that returns a shallow-readonly version of the value
|
||||
return res
|
||||
}
|
||||
if (isRef(res)) {
|
||||
return res.value
|
||||
}
|
||||
track(target, OperationTypes.GET, key)
|
||||
track(target, TrackOpTypes.GET, key)
|
||||
return isObject(res)
|
||||
? isReadonly
|
||||
? // need to lazy access readonly and reactive here to avoid
|
||||
@@ -56,15 +56,15 @@ function set(
|
||||
if (__DEV__) {
|
||||
const extraInfo = { oldValue, newValue: value }
|
||||
if (!hadKey) {
|
||||
trigger(target, OperationTypes.ADD, key, extraInfo)
|
||||
trigger(target, TriggerOpTypes.ADD, key, extraInfo)
|
||||
} else if (hasChanged(value, oldValue)) {
|
||||
trigger(target, OperationTypes.SET, key, extraInfo)
|
||||
trigger(target, TriggerOpTypes.SET, key, extraInfo)
|
||||
}
|
||||
} else {
|
||||
if (!hadKey) {
|
||||
trigger(target, OperationTypes.ADD, key)
|
||||
trigger(target, TriggerOpTypes.ADD, key)
|
||||
} else if (hasChanged(value, oldValue)) {
|
||||
trigger(target, OperationTypes.SET, key)
|
||||
trigger(target, TriggerOpTypes.SET, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,9 +78,9 @@ function deleteProperty(target: object, key: string | symbol): boolean {
|
||||
if (result && hadKey) {
|
||||
/* istanbul ignore else */
|
||||
if (__DEV__) {
|
||||
trigger(target, OperationTypes.DELETE, key, { oldValue })
|
||||
trigger(target, TriggerOpTypes.DELETE, key, { oldValue })
|
||||
} else {
|
||||
trigger(target, OperationTypes.DELETE, key)
|
||||
trigger(target, TriggerOpTypes.DELETE, key)
|
||||
}
|
||||
}
|
||||
return result
|
||||
@@ -88,12 +88,12 @@ function deleteProperty(target: object, key: string | symbol): boolean {
|
||||
|
||||
function has(target: object, key: string | symbol): boolean {
|
||||
const result = Reflect.has(target, key)
|
||||
track(target, OperationTypes.HAS, key)
|
||||
track(target, TrackOpTypes.HAS, key)
|
||||
return result
|
||||
}
|
||||
|
||||
function ownKeys(target: object): (string | number | symbol)[] {
|
||||
track(target, OperationTypes.ITERATE)
|
||||
track(target, TrackOpTypes.ITERATE, ITERATE_KEY)
|
||||
return Reflect.ownKeys(target)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user