fix(reactivity): toRef should not wrap a ref (#2103)

This commit is contained in:
Carlos Rodrigues 2020-09-15 15:29:38 +01:00 committed by GitHub
parent aa8dc9a507
commit d4bf9bcbb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 4 deletions

View File

@ -236,6 +236,10 @@ describe('reactivity/ref', () => {
// mutating source should trigger effect using the proxy refs
a.x = 4
expect(dummyX).toBe(4)
// should keep ref
const r = { x: ref(1) }
expect(toRef(r, 'x')).toBe(r.x)
})
test('toRefs', () => {
@ -292,12 +296,12 @@ describe('reactivity/ref', () => {
test('toRefs reactive array', () => {
const arr = reactive(['a', 'b', 'c'])
const refs = toRefs(arr)
expect(Array.isArray(refs)).toBe(true)
refs[0].value = '1'
expect(arr[0]).toBe('1')
arr[1] = '2'
expect(refs[1].value).toBe('2')
})

View File

@ -168,7 +168,9 @@ export function toRef<T extends object, K extends keyof T>(
object: T,
key: K
): Ref<T[K]> {
return new ObjectRefImpl(object, key) as any
return isRef(object[key])
? object[key]
: (new ObjectRefImpl(object, key) as any)
}
// corner case when use narrows type