|
|
@ -1,7 +1,7 @@ |
|
|
|
import { isTracking, trackEffects, triggerEffects } from './effect' |
|
|
|
import { TrackOpTypes, TriggerOpTypes } from './operations' |
|
|
|
import { isArray, isObject, hasChanged } from '@vue/shared' |
|
|
|
import { reactive, isProxy, toRaw, isReactive } from './reactive' |
|
|
|
import { isArray, hasChanged } from '@vue/shared' |
|
|
|
import { isProxy, toRaw, isReactive, toReactive } from './reactive' |
|
|
|
import { CollectionTypes } from './collectionHandlers' |
|
|
|
import { createDep, Dep } from './dep' |
|
|
|
|
|
|
@ -60,9 +60,6 @@ export function triggerRefValue(ref: RefBase<any>, newVal?: any) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const convert = <T extends unknown>(val: T): T => |
|
|
|
isObject(val) ? reactive(val) : val |
|
|
|
|
|
|
|
export function isRef<T>(r: Ref<T> | unknown): r is Ref<T> |
|
|
|
export function isRef(r: any): r is Ref { |
|
|
|
return Boolean(r && r.__v_isRef === true) |
|
|
@ -84,6 +81,13 @@ export function shallowRef(value?: unknown) { |
|
|
|
return createRef(value, true) |
|
|
|
} |
|
|
|
|
|
|
|
function createRef(rawValue: unknown, shallow: boolean) { |
|
|
|
if (isRef(rawValue)) { |
|
|
|
return rawValue |
|
|
|
} |
|
|
|
return new RefImpl(rawValue, shallow) |
|
|
|
} |
|
|
|
|
|
|
|
class RefImpl<T> { |
|
|
|
private _value: T |
|
|
|
private _rawValue: T |
|
|
@ -93,7 +97,7 @@ class RefImpl<T> { |
|
|
|
|
|
|
|
constructor(value: T, public readonly _shallow: boolean) { |
|
|
|
this._rawValue = _shallow ? value : toRaw(value) |
|
|
|
this._value = _shallow ? value : convert(value) |
|
|
|
this._value = _shallow ? value : toReactive(value) |
|
|
|
} |
|
|
|
|
|
|
|
get value() { |
|
|
@ -105,19 +109,12 @@ class RefImpl<T> { |
|
|
|
newVal = this._shallow ? newVal : toRaw(newVal) |
|
|
|
if (hasChanged(newVal, this._rawValue)) { |
|
|
|
this._rawValue = newVal |
|
|
|
this._value = this._shallow ? newVal : convert(newVal) |
|
|
|
this._value = this._shallow ? newVal : toReactive(newVal) |
|
|
|
triggerRefValue(this, newVal) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function createRef(rawValue: unknown, shallow: boolean) { |
|
|
|
if (isRef(rawValue)) { |
|
|
|
return rawValue |
|
|
|
} |
|
|
|
return new RefImpl(rawValue, shallow) |
|
|
|
} |
|
|
|
|
|
|
|
export function triggerRef(ref: Ref) { |
|
|
|
triggerRefValue(ref, __DEV__ ? ref.value : void 0) |
|
|
|
} |
|
|
|