Procházet zdrojové kódy

fix(reactivity): use isExtensible instead of isFrozen (#1753)

close #1784
wujieZ před 5 roky
rodič
revize
2787c34cd4

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

@@ -183,11 +183,16 @@ describe('reactivity/reactive', () => {
     expect(isReactive(obj.bar)).toBe(false)
   })
 
-  test('should not observe frozen objects', () => {
+  test('should not observe non-extensible objects', () => {
     const obj = reactive({
-      foo: Object.freeze({ a: 1 })
+      foo: Object.preventExtensions({ a: 1 }),
+      // sealed or frozen objects are considered non-extensible as well
+      bar: Object.freeze({ a: 1 }),
+      baz: Object.seal({ a: 1 })
     })
     expect(isReactive(obj.foo)).toBe(false)
+    expect(isReactive(obj.bar)).toBe(false)
+    expect(isReactive(obj.baz)).toBe(false)
   })
 
   test('should not observe objects with __v_skip', () => {

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

@@ -39,7 +39,7 @@ const canObserve = (value: Target): boolean => {
   return (
     !value[ReactiveFlags.SKIP] &&
     isObservableType(toRawType(value)) &&
-    !Object.isFrozen(value)
+    Object.isExtensible(value)
   )
 }