Parcourir la source

fix(reactivity): should not observe frozen objects

fix #867
Evan You il y a 6 ans
Parent
commit
1b2149dbb2

+ 7 - 0
packages/reactivity/__tests__/reactive.spec.ts

@@ -155,6 +155,13 @@ describe('reactivity/reactive', () => {
     expect(isReactive(obj.bar)).toBe(false)
   })
 
+  test('should not observe frozen objects', () => {
+    const obj = reactive({
+      foo: Object.freeze({ a: 1 })
+    })
+    expect(isReactive(obj.foo)).toBe(false)
+  })
+
   describe('shallowReactive', () => {
     test('should not make non-reactive properties reactive', () => {
       const props = shallowReactive({ n: { foo: 1 } })

+ 2 - 1
packages/reactivity/src/reactive.ts

@@ -33,7 +33,8 @@ const canObserve = (value: any): boolean => {
     !value._isVue &&
     !value._isVNode &&
     isObservableType(toRawType(value)) &&
-    !nonReactiveValues.has(value)
+    !nonReactiveValues.has(value) &&
+    !Object.isFrozen(value)
   )
 }