|
|
@@ -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
|