chore(reactivity): use ReactiveFlags instead of __v_ properties (#1313)
This commit is contained in:
parent
d4e9b19932
commit
f3eac11058
@ -37,7 +37,7 @@ const isObservableType = /*#__PURE__*/ makeMap(
|
|||||||
|
|
||||||
const canObserve = (value: Target): boolean => {
|
const canObserve = (value: Target): boolean => {
|
||||||
return (
|
return (
|
||||||
!value.__v_skip &&
|
!value[ReactiveFlags.skip] &&
|
||||||
isObservableType(toRawType(value)) &&
|
isObservableType(toRawType(value)) &&
|
||||||
!Object.isFrozen(value)
|
!Object.isFrozen(value)
|
||||||
)
|
)
|
||||||
@ -49,7 +49,7 @@ type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRef<T>
|
|||||||
export function reactive<T extends object>(target: T): UnwrapNestedRefs<T>
|
export function reactive<T extends object>(target: T): UnwrapNestedRefs<T>
|
||||||
export function reactive(target: object) {
|
export function reactive(target: object) {
|
||||||
// if trying to observe a readonly proxy, return the readonly version.
|
// if trying to observe a readonly proxy, return the readonly version.
|
||||||
if (target && (target as Target).__v_isReadonly) {
|
if (target && (target as Target)[ReactiveFlags.isReadonly]) {
|
||||||
return target
|
return target
|
||||||
}
|
}
|
||||||
return createReactiveObject(
|
return createReactiveObject(
|
||||||
@ -112,14 +112,19 @@ function createReactiveObject(
|
|||||||
}
|
}
|
||||||
// target is already a Proxy, return it.
|
// target is already a Proxy, return it.
|
||||||
// exception: calling readonly() on a reactive object
|
// exception: calling readonly() on a reactive object
|
||||||
if (target.__v_raw && !(isReadonly && target.__v_isReactive)) {
|
if (
|
||||||
|
target[ReactiveFlags.raw] &&
|
||||||
|
!(isReadonly && target[ReactiveFlags.isReactive])
|
||||||
|
) {
|
||||||
return target
|
return target
|
||||||
}
|
}
|
||||||
// target already has corresponding Proxy
|
// target already has corresponding Proxy
|
||||||
if (
|
if (
|
||||||
hasOwn(target, isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive)
|
hasOwn(target, isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive)
|
||||||
) {
|
) {
|
||||||
return isReadonly ? target.__v_readonly : target.__v_reactive
|
return isReadonly
|
||||||
|
? target[ReactiveFlags.readonly]
|
||||||
|
: target[ReactiveFlags.reactive]
|
||||||
}
|
}
|
||||||
// only a whitelist of value types can be observed.
|
// only a whitelist of value types can be observed.
|
||||||
if (!canObserve(target)) {
|
if (!canObserve(target)) {
|
||||||
@ -139,13 +144,13 @@ function createReactiveObject(
|
|||||||
|
|
||||||
export function isReactive(value: unknown): boolean {
|
export function isReactive(value: unknown): boolean {
|
||||||
if (isReadonly(value)) {
|
if (isReadonly(value)) {
|
||||||
return isReactive((value as Target).__v_raw)
|
return isReactive((value as Target)[ReactiveFlags.raw])
|
||||||
}
|
}
|
||||||
return !!(value && (value as Target).__v_isReactive)
|
return !!(value && (value as Target)[ReactiveFlags.isReactive])
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isReadonly(value: unknown): boolean {
|
export function isReadonly(value: unknown): boolean {
|
||||||
return !!(value && (value as Target).__v_isReadonly)
|
return !!(value && (value as Target)[ReactiveFlags.isReadonly])
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isProxy(value: unknown): boolean {
|
export function isProxy(value: unknown): boolean {
|
||||||
@ -153,7 +158,9 @@ export function isProxy(value: unknown): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function toRaw<T>(observed: T): T {
|
export function toRaw<T>(observed: T): T {
|
||||||
return (observed && toRaw((observed as Target).__v_raw)) || observed
|
return (
|
||||||
|
(observed && toRaw((observed as Target)[ReactiveFlags.raw])) || observed
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function markRaw<T extends object>(value: T): T {
|
export function markRaw<T extends object>(value: T): T {
|
||||||
|
Loading…
Reference in New Issue
Block a user