From 0b6ab2508da57c205d73f40c0c29bf67e0e04cc1 Mon Sep 17 00:00:00 2001 From: ygj6 Date: Fri, 18 Jun 2021 03:30:28 +0800 Subject: [PATCH] fix(proxyRefs): infinite loop when using proxyRefs. (#730) --- src/reactivity/ref.ts | 12 ++++++------ test/v3/reactivity/ref.spec.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/reactivity/ref.ts b/src/reactivity/ref.ts index ce8458ac..32c187d1 100644 --- a/src/reactivity/ref.ts +++ b/src/reactivity/ref.ts @@ -198,16 +198,16 @@ export function proxyRefs( for (const key of Object.keys(objectWithRefs)) { proxy(value, key, { get() { - if (isRef(value[key])) { - return value[key].value + if (isRef(value[RefKey][key])) { + return value[RefKey][key].value } - return value[key] + return value[RefKey][key] }, set(v: unknown) { - if (isRef(value[key])) { - return (value[key].value = unref(v)) + if (isRef(value[RefKey][key])) { + return (value[RefKey][key].value = unref(v)) } - value[key] = unref(v) + value[RefKey][key] = unref(v) }, }) } diff --git a/test/v3/reactivity/ref.spec.ts b/test/v3/reactivity/ref.spec.ts index 68062244..26f80780 100644 --- a/test/v3/reactivity/ref.spec.ts +++ b/test/v3/reactivity/ref.spec.ts @@ -12,6 +12,7 @@ import { unref, isReactive, shallowRef, + proxyRefs, } from '../../../src' describe('reactivity/ref', () => { @@ -342,4 +343,29 @@ describe('reactivity/ref', () => { _trigger!() expect(dummy).toBe(2) }) + + test('proxyRefs', () => { + const a = { + x: ref(1), + obj: { + y: ref('foo'), + }, + } + const p = proxyRefs(a) + expect(p.x).toBe(1) + expect(p.obj.y).toBe('foo') + + // @ts-expect-error + p.obj.y = 'bar' + p.x = 2 + expect(a.x).toBe(2) + expect(a.obj.y).toBe('bar') + + const r = reactive({ k: 'v' }) + const s = proxyRefs(r) + expect(s.k).toBe('v') + + r.k = 'k' + expect(s.k).toBe('k') + }) })