effect,
reactive,
isRef,
+ toRef,
toRefs,
Ref,
isReactive
expect(isRef({ value: 0 })).toBe(false)
})
+ test('toRef', () => {
+ const a = reactive({
+ x: 1
+ })
+ const x = toRef(a, 'x')
+ expect(isRef(x)).toBe(true)
+ expect(x.value).toBe(1)
+
+ // source -> proxy
+ a.x = 2
+ expect(x.value).toBe(2)
+
+ // proxy -> source
+ x.value = 3
+ expect(a.x).toBe(3)
+
+ // reactivity
+ let dummyX
+ effect(() => {
+ dummyX = x.value
+ })
+ expect(dummyX).toBe(x.value)
+
+ // mutating source should trigger effect using the proxy refs
+ a.x = 4
+ expect(dummyX).toBe(4)
+ })
+
test('toRefs', () => {
const a = reactive({
x: 1,
}
}))
+ expect(isRef(custom)).toBe(true)
+
let dummy
effect(() => {
dummy = custom.value
}
const ret: any = {}
for (const key in object) {
- ret[key] = toProxyRef(object, key)
+ ret[key] = toRef(object, key)
}
return ret
}
-function toProxyRef<T extends object, K extends keyof T>(
+export function toRef<T extends object, K extends keyof T>(
object: T,
key: K
): Ref<T[K]> {