Skip to content

Commit 486dc18

Browse files
committed
feat(reactivity): add support for toRef API
1 parent b83c580 commit 486dc18

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

packages/reactivity/__tests__/ref.spec.ts

+31
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
effect,
44
reactive,
55
isRef,
6+
toRef,
67
toRefs,
78
Ref,
89
isReactive
@@ -168,6 +169,34 @@ describe('reactivity/ref', () => {
168169
expect(isRef({ value: 0 })).toBe(false)
169170
})
170171

172+
test('toRef', () => {
173+
const a = reactive({
174+
x: 1
175+
})
176+
const x = toRef(a, 'x')
177+
expect(isRef(x)).toBe(true)
178+
expect(x.value).toBe(1)
179+
180+
// source -> proxy
181+
a.x = 2
182+
expect(x.value).toBe(2)
183+
184+
// proxy -> source
185+
x.value = 3
186+
expect(a.x).toBe(3)
187+
188+
// reactivity
189+
let dummyX
190+
effect(() => {
191+
dummyX = x.value
192+
})
193+
expect(dummyX).toBe(x.value)
194+
195+
// mutating source should trigger effect using the proxy refs
196+
a.x = 4
197+
expect(dummyX).toBe(4)
198+
})
199+
171200
test('toRefs', () => {
172201
const a = reactive({
173202
x: 1,
@@ -224,6 +253,8 @@ describe('reactivity/ref', () => {
224253
}
225254
}))
226255

256+
expect(isRef(custom)).toBe(true)
257+
227258
let dummy
228259
effect(() => {
229260
dummy = custom.value

packages/reactivity/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export {
33
unref,
44
shallowRef,
55
isRef,
6+
toRef,
67
toRefs,
78
customRef,
89
Ref,

packages/reactivity/src/ref.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ export function toRefs<T extends object>(
103103
}
104104
const ret: any = {}
105105
for (const key in object) {
106-
ret[key] = toProxyRef(object, key)
106+
ret[key] = toRef(object, key)
107107
}
108108
return ret
109109
}
110110

111-
function toProxyRef<T extends object, K extends keyof T>(
111+
export function toRef<T extends object, K extends keyof T>(
112112
object: T,
113113
key: K
114114
): Ref<T[K]> {

packages/runtime-core/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export {
66
unref,
77
shallowRef,
88
isRef,
9+
toRef,
910
toRefs,
1011
customRef,
1112
reactive,

0 commit comments

Comments
 (0)