import { ref, effect, reactive, isRef, toRefs } from '../src/index'
import { computed } from '@vue/runtime-dom'
-describe('reactivity/value', () => {
+describe('reactivity/ref', () => {
it('should hold a value', () => {
const a = ref(1)
expect(a.value).toBe(1)
import { effect, ReactiveEffect, activeReactiveEffectStack } from './effect'
-import { UnwrapNestedRefs, isRefSymbol, knownRefs } from './ref'
+import { UnwrapNestedRefs } from './ref'
import { isFunction } from '@vue/shared'
export interface ComputedRef<T> {
- [isRefSymbol]: true
+ _isRef: true
readonly value: UnwrapNestedRefs<T>
readonly effect: ReactiveEffect
}
export interface WritableComputedRef<T> {
- [isRefSymbol]: true
+ _isRef: true
value: UnwrapNestedRefs<T>
readonly effect: ReactiveEffect
}
dirty = true
}
})
- const computedRef = {
+ return {
+ _isRef: true,
// expose effect so computed can be stopped
effect: runner,
get value() {
}
}
}
- knownRefs.add(computedRef)
- return computedRef
}
function trackChildRun(childRunner: ReactiveEffect) {
import { isObject } from '@vue/shared'
import { reactive } from './reactive'
-export const knownRefs = new WeakSet()
-
-export const isRefSymbol = Symbol()
-
export interface Ref<T> {
- // this is a type-only field to avoid objects with 'value' property being
- // treated as a ref by TypeScript
- [isRefSymbol]: true
+ _isRef: true
value: UnwrapNestedRefs<T>
}
export function ref<T>(raw: T): Ref<T> {
raw = convert(raw)
const v = {
+ _isRef: true,
get value() {
track(v, OperationTypes.GET, '')
return raw
trigger(v, OperationTypes.SET, '')
}
}
- knownRefs.add(v)
return v as Ref<T>
}
export function isRef(v: any): v is Ref<any> {
- return knownRefs.has(v)
+ return v ? v._isRef === true : false
}
export function toRefs<T extends object>(
key: K
): Ref<T[K]> {
const v = {
+ _isRef: true,
get value() {
return object[key]
},
object[key] = newVal
}
}
- knownRefs.add(v)
return v as Ref<T[K]>
}
}
export function isVNode(value: any): boolean {
- return value && value._isVNode
+ return value ? value._isVNode === true : false
}
export function createVNode(