diff --git a/src/core/observer/index.ts b/src/core/observer/index.ts index dcf6bde1e76..51f928c5c24 100644 --- a/src/core/observer/index.ts +++ b/src/core/observer/index.ts @@ -7,7 +7,6 @@ import { hasOwn, isArray, hasProto, - isObject, isPlainObject, isPrimitive, isUndef, @@ -108,23 +107,21 @@ export function observe( shallow?: boolean, ssrMockReactivity?: boolean ): Observer | void { - if (!isObject(value) || isRef(value) || value instanceof VNode) { - return + if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + return value.__ob__ } - let ob: Observer | void - if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { - ob = value.__ob__ - } else if ( + if ( shouldObserve && (ssrMockReactivity || !isServerRendering()) && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value.__v_skip /* ReactiveFlags.SKIP */ && - !rawMap.has(value) + !rawMap.has(value) && + !isRef(value) && + !(value instanceof VNode) ) { - ob = new Observer(value, shallow, ssrMockReactivity) + return new Observer(value, shallow, ssrMockReactivity) } - return ob } /**