From 0bdee72e17f920354c4e72a921b944e22bf30ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=A9=E6=95=A3=E6=80=A7=E7=99=BE=E4=B8=87=E7=94=9C?= =?UTF-8?q?=E9=9D=A2=E5=8C=85?= Date: Sun, 6 Oct 2019 03:46:36 +0800 Subject: [PATCH] feat(reactivity): use Symbol for Ref._isRef (#114) --- packages/reactivity/src/computed.ts | 4 ++-- packages/reactivity/src/ref.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index f06eb0a8..9ed42716 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -1,5 +1,5 @@ import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect' -import { Ref, UnwrapNestedRefs } from './ref' +import { Ref, refSymbol, UnwrapNestedRefs } from './ref' import { isFunction } from '@vue/shared' export interface ComputedRef extends Ref { @@ -43,7 +43,7 @@ export function computed( } }) return { - _isRef: true, + _isRef: refSymbol, // expose effect so computed can be stopped effect: runner, get value() { diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index c3fc1c02..ad39a74f 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -3,8 +3,10 @@ import { OperationTypes } from './operations' import { isObject } from '@vue/shared' import { reactive } from './reactive' +export const refSymbol = Symbol() + export interface Ref { - _isRef: true + _isRef: symbol value: UnwrapNestedRefs } @@ -15,7 +17,7 @@ const convert = (val: any): any => (isObject(val) ? reactive(val) : val) export function ref(raw: T): Ref { raw = convert(raw) const v = { - _isRef: true, + _isRef: refSymbol, get value() { track(v, OperationTypes.GET, '') return raw @@ -29,7 +31,7 @@ export function ref(raw: T): Ref { } export function isRef(v: any): v is Ref { - return v ? v._isRef === true : false + return v ? v._isRef === refSymbol : false } export function toRefs( @@ -47,7 +49,7 @@ function toProxyRef( key: K ): Ref { const v = { - _isRef: true, + _isRef: refSymbol, get value() { return object[key] },