From: Wick Date: Mon, 15 Apr 2024 14:55:37 +0000 (+0800) Subject: fix(reactivity): computed should not be detected as true by isProxy (#10401) X-Git-Tag: v3.4.22~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9da34d7af81607fddd1f32f21b3b4002402ff1cc;p=thirdparty%2Fvuejs%2Fcore.git fix(reactivity): computed should not be detected as true by isProxy (#10401) --- diff --git a/packages/reactivity/__tests__/reactive.spec.ts b/packages/reactivity/__tests__/reactive.spec.ts index cdcd032580..bd4ec402bb 100644 --- a/packages/reactivity/__tests__/reactive.spec.ts +++ b/packages/reactivity/__tests__/reactive.spec.ts @@ -1,5 +1,14 @@ import { isRef, ref } from '../src/ref' -import { isReactive, markRaw, reactive, toRaw } from '../src/reactive' +import { + isProxy, + isReactive, + markRaw, + reactive, + readonly, + shallowReactive, + shallowReadonly, + toRaw, +} from '../src/reactive' import { computed } from '../src/computed' import { effect } from '../src/effect' @@ -330,4 +339,24 @@ describe('reactivity/reactive', () => { delete obj[key] expect(dummy).toBe(false) }) + + test('isProxy', () => { + const foo = {} + expect(isProxy(foo)).toBe(false) + + const fooRe = reactive(foo) + expect(isProxy(fooRe)).toBe(true) + + const fooSRe = shallowReactive(foo) + expect(isProxy(fooSRe)).toBe(true) + + const barRl = readonly(foo) + expect(isProxy(barRl)).toBe(true) + + const barSRl = shallowReadonly(foo) + expect(isProxy(barSRl)).toBe(true) + + const c = computed(() => {}) + expect(isProxy(c)).toBe(false) + }) }) diff --git a/packages/reactivity/src/reactive.ts b/packages/reactivity/src/reactive.ts index 7e80737fbc..f6fcbbdb98 100644 --- a/packages/reactivity/src/reactive.ts +++ b/packages/reactivity/src/reactive.ts @@ -329,8 +329,8 @@ export function isShallow(value: unknown): boolean { * @param value - The value to check. * @see {@link https://vuejs.org/api/reactivity-utilities.html#isproxy} */ -export function isProxy(value: unknown): boolean { - return isReactive(value) || isReadonly(value) +export function isProxy(value: any): boolean { + return value ? !!value[ReactiveFlags.RAW] : false } /**