Ver código fonte

refactor(reactivity): improve nested readonly ref set check

ref #9094
Evan You 2 anos atrás
pai
commit
ef432bda77
1 arquivos alterados com 7 adições e 5 exclusões
  1. 7 5
      packages/reactivity/src/baseHandlers.ts

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

@@ -174,17 +174,19 @@ class MutableReactiveHandler extends BaseReactiveHandler {
     receiver: object
   ): boolean {
     let oldValue = (target as any)[key]
-    if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
-      return false
-    }
     if (!this._shallow) {
+      const isOldValueReadonly = isReadonly(oldValue)
       if (!isShallow(value) && !isReadonly(value)) {
         oldValue = toRaw(oldValue)
         value = toRaw(value)
       }
       if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
-        oldValue.value = value
-        return true
+        if (isOldValueReadonly) {
+          return false
+        } else {
+          oldValue.value = value
+          return true
+        }
       }
     } else {
       // in shallow mode, objects are set as-is regardless of reactive or not