Skip to content

Commit 0b6ab25

Browse files
authored
fix(proxyRefs): infinite loop when using proxyRefs. (#730)
1 parent d30a45a commit 0b6ab25

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

src/reactivity/ref.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -198,16 +198,16 @@ export function proxyRefs<T extends object>(
198198
for (const key of Object.keys(objectWithRefs)) {
199199
proxy(value, key, {
200200
get() {
201-
if (isRef(value[key])) {
202-
return value[key].value
201+
if (isRef(value[RefKey][key])) {
202+
return value[RefKey][key].value
203203
}
204-
return value[key]
204+
return value[RefKey][key]
205205
},
206206
set(v: unknown) {
207-
if (isRef(value[key])) {
208-
return (value[key].value = unref(v))
207+
if (isRef(value[RefKey][key])) {
208+
return (value[RefKey][key].value = unref(v))
209209
}
210-
value[key] = unref(v)
210+
value[RefKey][key] = unref(v)
211211
},
212212
})
213213
}

test/v3/reactivity/ref.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
unref,
1313
isReactive,
1414
shallowRef,
15+
proxyRefs,
1516
} from '../../../src'
1617

1718
describe('reactivity/ref', () => {
@@ -342,4 +343,29 @@ describe('reactivity/ref', () => {
342343
_trigger!()
343344
expect(dummy).toBe(2)
344345
})
346+
347+
test('proxyRefs', () => {
348+
const a = {
349+
x: ref(1),
350+
obj: {
351+
y: ref('foo'),
352+
},
353+
}
354+
const p = proxyRefs(a)
355+
expect(p.x).toBe(1)
356+
expect(p.obj.y).toBe('foo')
357+
358+
// @ts-expect-error
359+
p.obj.y = 'bar'
360+
p.x = 2
361+
expect(a.x).toBe(2)
362+
expect(a.obj.y).toBe('bar')
363+
364+
const r = reactive({ k: 'v' })
365+
const s = proxyRefs(r)
366+
expect(s.k).toBe('v')
367+
368+
r.k = 'k'
369+
expect(s.k).toBe('k')
370+
})
345371
})

0 commit comments

Comments
 (0)