diff --git a/packages/reactivity/__tests__/readonly.spec.ts b/packages/reactivity/__tests__/readonly.spec.ts index 5c70b6082f1..b035779f85a 100644 --- a/packages/reactivity/__tests__/readonly.spec.ts +++ b/packages/reactivity/__tests__/readonly.spec.ts @@ -523,7 +523,7 @@ describe('reactivity/readonly', () => { }) }) -test.todo('should be able to trigger with triggerRef', () => { +test('should be able to trigger with triggerRef', () => { const r = shallowRef({ a: 1 }) const ror = readonly(r) let dummy diff --git a/packages/reactivity/src/baseHandlers.ts b/packages/reactivity/src/baseHandlers.ts index faec3012f40..3b2dcfdec90 100644 --- a/packages/reactivity/src/baseHandlers.ts +++ b/packages/reactivity/src/baseHandlers.ts @@ -96,15 +96,20 @@ class BaseReactiveHandler implements ProxyHandler { } } + const wasRef = isRef(target) const res = Reflect.get( target, key, // if this is a proxy wrapping a ref, return methods using the raw ref // as receiver so that we don't have to call `toRaw` on the ref in all // its class methods - isRef(target) ? target : receiver, + wasRef ? target : receiver, ) + if (wasRef && key !== 'value') { + return res + } + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { return res } diff --git a/packages/reactivity/src/dep.ts b/packages/reactivity/src/dep.ts index 3fd81514b6f..184964c17b8 100644 --- a/packages/reactivity/src/dep.ts +++ b/packages/reactivity/src/dep.ts @@ -15,12 +15,6 @@ class Dep implements Dependency { _subs: Link | undefined = undefined subsTail: Link | undefined = undefined - /** - * @internal - */ - readonly __v_skip = true - // TODO isolatedDeclarations ReactiveFlags.SKIP - constructor( private map: KeyToDepMap, private key: unknown,