Sfoglia il codice sorgente

fix(reactivity): warn on nested readonly ref update during unwrapping (#12141)

Tycho 8 mesi fa
parent
commit
1498821ed9

+ 4 - 3
packages/reactivity/__tests__/readonly.spec.ts

@@ -498,9 +498,10 @@ describe('reactivity/readonly', () => {
     const r = ref(false)
     const r = ref(false)
     const ror = readonly(r)
     const ror = readonly(r)
     const obj = reactive({ ror })
     const obj = reactive({ ror })
-    expect(() => {
-      obj.ror = true
-    }).toThrow()
+    obj.ror = true
+    expect(
+      `Set operation on key "ror" failed: target is readonly.`,
+    ).toHaveBeenWarned()
     expect(obj.ror).toBe(false)
     expect(obj.ror).toBe(false)
   })
   })
 
 

+ 7 - 1
packages/reactivity/src/baseHandlers.ts

@@ -153,7 +153,13 @@ class MutableReactiveHandler extends BaseReactiveHandler {
       }
       }
       if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
       if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
         if (isOldValueReadonly) {
         if (isOldValueReadonly) {
-          return false
+          if (__DEV__) {
+            warn(
+              `Set operation on key "${String(key)}" failed: target is readonly.`,
+              target[key],
+            )
+          }
+          return true
         } else {
         } else {
           oldValue.value = value
           oldValue.value = value
           return true
           return true