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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user