Skip to content

Commit aba7fed

Browse files
authored
fix(reactivity): respect readonly during ref unwrapping (#13905)
close #13903
1 parent ba7f7f9 commit aba7fed

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

packages/reactivity/__tests__/readonly.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,16 @@ describe('reactivity/readonly', () => {
522522
expect(obj.r).toBe(ro)
523523
expect(r.value).toBe(ro)
524524
})
525+
526+
test('should keep nested ref readonly', () => {
527+
const items = ref(['one', 'two', 'three'])
528+
const obj = {
529+
o: readonly({
530+
items,
531+
}),
532+
}
533+
expect(isReadonly(obj.o.items)).toBe(true)
534+
})
525535
})
526536

527537
test('should be able to trigger with triggerRef', () => {

packages/reactivity/src/baseHandlers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ class BaseReactiveHandler implements ProxyHandler<Target> {
119119

120120
if (isRef(res)) {
121121
// ref unwrapping - skip unwrap for Array + integer key.
122-
return targetIsArray && isIntegerKey(key) ? res : res.value
122+
const value = targetIsArray && isIntegerKey(key) ? res : res.value
123+
return isReadonly && isObject(value) ? readonly(value) : value
123124
}
124125

125126
if (isObject(res)) {

0 commit comments

Comments
 (0)