mirror of https://github.com/vuejs/core.git
fix(reactivity): ensure markRaw objects are not reactive (#12824)
close #12807
This commit is contained in:
parent
0c8dd94ef9
commit
295b5ec19b
|
@ -301,6 +301,13 @@ describe('reactivity/reactive', () => {
|
||||||
expect(() => markRaw(obj)).not.toThrowError()
|
expect(() => markRaw(obj)).not.toThrowError()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should not markRaw object as reactive', () => {
|
||||||
|
const a = reactive({ a: 1 })
|
||||||
|
const b = reactive({ b: 2 }) as any
|
||||||
|
b.a = markRaw(toRaw(a))
|
||||||
|
expect(b.a === a).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
test('should not observe non-extensible objects', () => {
|
test('should not observe non-extensible objects', () => {
|
||||||
const obj = reactive({
|
const obj = reactive({
|
||||||
foo: Object.preventExtensions({ a: 1 }),
|
foo: Object.preventExtensions({ a: 1 }),
|
||||||
|
|
|
@ -279,16 +279,16 @@ function createReactiveObject(
|
||||||
) {
|
) {
|
||||||
return target
|
return target
|
||||||
}
|
}
|
||||||
// target already has corresponding Proxy
|
|
||||||
const existingProxy = proxyMap.get(target)
|
|
||||||
if (existingProxy) {
|
|
||||||
return existingProxy
|
|
||||||
}
|
|
||||||
// only specific value types can be observed.
|
// only specific value types can be observed.
|
||||||
const targetType = getTargetType(target)
|
const targetType = getTargetType(target)
|
||||||
if (targetType === TargetType.INVALID) {
|
if (targetType === TargetType.INVALID) {
|
||||||
return target
|
return target
|
||||||
}
|
}
|
||||||
|
// target already has corresponding Proxy
|
||||||
|
const existingProxy = proxyMap.get(target)
|
||||||
|
if (existingProxy) {
|
||||||
|
return existingProxy
|
||||||
|
}
|
||||||
const proxy = new Proxy(
|
const proxy = new Proxy(
|
||||||
target,
|
target,
|
||||||
targetType === TargetType.COLLECTION ? collectionHandlers : baseHandlers,
|
targetType === TargetType.COLLECTION ? collectionHandlers : baseHandlers,
|
||||||
|
|
Loading…
Reference in New Issue