Benchmarking shows checking for a plain property is about 4~5x faster
than checking for a Symbol, likely because the Symbol does not fit well
into V8's hidden class model.
import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect'
-import { Ref, refSymbol, UnwrapRef } from './ref'
+import { Ref, UnwrapRef } from './ref'
import { isFunction, NOOP } from '@vue/shared'
export interface ComputedRef<T> extends WritableComputedRef<T> {
}
})
return {
- [refSymbol]: true,
+ _isRef: true,
// expose effect so computed can be stopped
effect: runner,
get value() {
import { reactive } from './reactive'
import { ComputedRef } from './computed'
-export const refSymbol = Symbol(__DEV__ ? 'refSymbol' : '')
-
export interface Ref<T = any> {
- [refSymbol]: true
+ _isRef: true
value: UnwrapRef<T>
}
}
raw = convert(raw)
const v = {
- [refSymbol]: true,
+ _isRef: true,
get value() {
track(v, OperationTypes.GET, '')
return raw
}
export function isRef(v: any): v is Ref {
- return v ? v[refSymbol] === true : false
+ return v ? v._isRef === true : false
}
export function toRefs<T extends object>(
key: K
): Ref<T[K]> {
return {
- [refSymbol]: true,
+ _isRef: true,
get value(): any {
return object[key]
},