Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix(proxyRefs): infinite loop when using proxyRefs. (#730)
  • Loading branch information
ygj6 committed Jun 17, 2021
1 parent d30a45a commit 0b6ab25
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/reactivity/ref.ts
Expand Up @@ -198,16 +198,16 @@ export function proxyRefs<T extends object>(
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)
},
})
}
Expand Down
26 changes: 26 additions & 0 deletions test/v3/reactivity/ref.spec.ts
Expand Up @@ -12,6 +12,7 @@ import {
unref,
isReactive,
shallowRef,
proxyRefs,
} from '../../../src'

describe('reactivity/ref', () => {
Expand Down Expand Up @@ -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')
})
})

0 comments on commit 0b6ab25

Please sign in to comment.