feat(reactivity): use Symbol for Ref._isRef (#114)
This commit is contained in:
		
							parent
							
								
									de9507b6ff
								
							
						
					
					
						commit
						0bdee72e17
					
				@ -1,5 +1,5 @@
 | 
				
			|||||||
import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect'
 | 
					import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect'
 | 
				
			||||||
import { Ref, UnwrapNestedRefs } from './ref'
 | 
					import { Ref, refSymbol, UnwrapNestedRefs } from './ref'
 | 
				
			||||||
import { isFunction } from '@vue/shared'
 | 
					import { isFunction } from '@vue/shared'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface ComputedRef<T> extends Ref<T> {
 | 
					export interface ComputedRef<T> extends Ref<T> {
 | 
				
			||||||
@ -43,7 +43,7 @@ export function computed<T>(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    _isRef: true,
 | 
					    _isRef: refSymbol,
 | 
				
			||||||
    // expose effect so computed can be stopped
 | 
					    // expose effect so computed can be stopped
 | 
				
			||||||
    effect: runner,
 | 
					    effect: runner,
 | 
				
			||||||
    get value() {
 | 
					    get value() {
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,10 @@ import { OperationTypes } from './operations'
 | 
				
			|||||||
import { isObject } from '@vue/shared'
 | 
					import { isObject } from '@vue/shared'
 | 
				
			||||||
import { reactive } from './reactive'
 | 
					import { reactive } from './reactive'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const refSymbol = Symbol()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface Ref<T> {
 | 
					export interface Ref<T> {
 | 
				
			||||||
  _isRef: true
 | 
					  _isRef: symbol
 | 
				
			||||||
  value: UnwrapNestedRefs<T>
 | 
					  value: UnwrapNestedRefs<T>
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -15,7 +17,7 @@ const convert = (val: any): any => (isObject(val) ? reactive(val) : val)
 | 
				
			|||||||
export function ref<T>(raw: T): Ref<T> {
 | 
					export function ref<T>(raw: T): Ref<T> {
 | 
				
			||||||
  raw = convert(raw)
 | 
					  raw = convert(raw)
 | 
				
			||||||
  const v = {
 | 
					  const v = {
 | 
				
			||||||
    _isRef: true,
 | 
					    _isRef: refSymbol,
 | 
				
			||||||
    get value() {
 | 
					    get value() {
 | 
				
			||||||
      track(v, OperationTypes.GET, '')
 | 
					      track(v, OperationTypes.GET, '')
 | 
				
			||||||
      return raw
 | 
					      return raw
 | 
				
			||||||
@ -29,7 +31,7 @@ export function ref<T>(raw: T): Ref<T> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function isRef(v: any): v is Ref<any> {
 | 
					export function isRef(v: any): v is Ref<any> {
 | 
				
			||||||
  return v ? v._isRef === true : false
 | 
					  return v ? v._isRef === refSymbol : false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function toRefs<T extends object>(
 | 
					export function toRefs<T extends object>(
 | 
				
			||||||
@ -47,7 +49,7 @@ function toProxyRef<T extends object, K extends keyof T>(
 | 
				
			|||||||
  key: K
 | 
					  key: K
 | 
				
			||||||
): Ref<T[K]> {
 | 
					): Ref<T[K]> {
 | 
				
			||||||
  const v = {
 | 
					  const v = {
 | 
				
			||||||
    _isRef: true,
 | 
					    _isRef: refSymbol,
 | 
				
			||||||
    get value() {
 | 
					    get value() {
 | 
				
			||||||
      return object[key]
 | 
					      return object[key]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user