Skip to content

Commit 6be2b73

Browse files
committed
fix(reactivity): check own property for existing proxy of target
fix #1107
1 parent 8bab78b commit 6be2b73

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

packages/reactivity/src/reactive.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isObject, toRawType, def } from '@vue/shared'
1+
import { isObject, toRawType, def, hasOwn } from '@vue/shared'
22
import {
33
mutableHandlers,
44
readonlyHandlers,
@@ -116,18 +116,19 @@ function createReactiveObject(
116116
return target
117117
}
118118
// target already has corresponding Proxy
119-
let observed = isReadonly ? target.__v_readonly : target.__v_reactive
120-
if (observed !== void 0) {
121-
return observed
119+
if (
120+
hasOwn(target, isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive)
121+
) {
122+
return isReadonly ? target.__v_readonly : target.__v_reactive
122123
}
123124
// only a whitelist of value types can be observed.
124125
if (!canObserve(target)) {
125126
return target
126127
}
127-
const handlers = collectionTypes.has(target.constructor)
128-
? collectionHandlers
129-
: baseHandlers
130-
observed = new Proxy(target, handlers)
128+
const observed = new Proxy(
129+
target,
130+
collectionTypes.has(target.constructor) ? collectionHandlers : baseHandlers
131+
)
131132
def(
132133
target,
133134
isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive,

0 commit comments

Comments
 (0)