]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(reactivity): `toRef` should not wrap a `ref` (#2103)
authorCarlos Rodrigues <david-181@hotmail.com>
Tue, 15 Sep 2020 14:29:38 +0000 (15:29 +0100)
committerGitHub <noreply@github.com>
Tue, 15 Sep 2020 14:29:38 +0000 (10:29 -0400)
packages/reactivity/__tests__/ref.spec.ts
packages/reactivity/src/ref.ts

index 9ef6c4e4b1589736d34931231b859b15079648cc..883af0f874bc29ba68b329701748dfb2110ca40a 100644 (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')
   })
index 64d9f1073ae572220c861ad6ff07d78a372b841f..6596ecddb01c926faafc09980de92346cff7f850 100644 (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