From: Carlos Rodrigues Date: Tue, 15 Sep 2020 14:29:38 +0000 (+0100) Subject: fix(reactivity): `toRef` should not wrap a `ref` (#2103) X-Git-Tag: v3.0.0-rc.11~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4bf9bcbb430fa0168ca48039579d59e6789c6f5;p=thirdparty%2Fvuejs%2Fcore.git fix(reactivity): `toRef` should not wrap a `ref` (#2103) --- diff --git a/packages/reactivity/__tests__/ref.spec.ts b/packages/reactivity/__tests__/ref.spec.ts index 9ef6c4e4b1..883af0f874 100644 --- a/packages/reactivity/__tests__/ref.spec.ts +++ b/packages/reactivity/__tests__/ref.spec.ts @@ -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') }) diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index 64d9f1073a..6596ecddb0 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -168,7 +168,9 @@ export function toRef( object: T, key: K ): Ref { - 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