File tree 2 files changed +26
-3
lines changed
2 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -35,6 +35,26 @@ describe('shallowReactive', () => {
35
35
expect ( isShallow ( shallowReadonly ( { } ) ) ) . toBe ( true )
36
36
} )
37
37
38
+ // #5271
39
+ test ( 'should respect shallow reactive nested inside reactive on reset' , ( ) => {
40
+ const r = reactive ( { foo : shallowReactive ( { bar : { } } ) } )
41
+ expect ( isShallow ( r . foo ) ) . toBe ( true )
42
+ expect ( isReactive ( r . foo . bar ) ) . toBe ( false )
43
+
44
+ r . foo = shallowReactive ( { bar : { } } )
45
+ expect ( isShallow ( r . foo ) ) . toBe ( true )
46
+ expect ( isReactive ( r . foo . bar ) ) . toBe ( false )
47
+ } )
48
+
49
+ test ( 'should respect shallow/deep versions of same target on access' , ( ) => {
50
+ const original = { }
51
+ const shallow = shallowReactive ( original )
52
+ const deep = reactive ( original )
53
+ const r = reactive ( { shallow, deep } )
54
+ expect ( r . shallow ) . toBe ( shallow )
55
+ expect ( r . deep ) . toBe ( deep )
56
+ } )
57
+
38
58
describe ( 'collections' , ( ) => {
39
59
test ( 'should be reactive' , ( ) => {
40
60
const shallowSet = shallowReactive ( new Set ( ) )
Original file line number Diff line number Diff line change 8
8
reactiveMap ,
9
9
shallowReactiveMap ,
10
10
shallowReadonlyMap ,
11
- isReadonly
11
+ isReadonly ,
12
+ isShallow
12
13
} from './reactive'
13
14
import { TrackOpTypes , TriggerOpTypes } from './operations'
14
15
import {
@@ -150,8 +151,10 @@ function createSetter(shallow = false) {
150
151
) : boolean {
151
152
let oldValue = ( target as any ) [ key ]
152
153
if ( ! shallow && ! isReadonly ( value ) ) {
153
- value = toRaw ( value )
154
- oldValue = toRaw ( oldValue )
154
+ if ( ! isShallow ( value ) ) {
155
+ value = toRaw ( value )
156
+ oldValue = toRaw ( oldValue )
157
+ }
155
158
if ( ! isArray ( target ) && isRef ( oldValue ) && ! isRef ( value ) ) {
156
159
oldValue . value = value
157
160
return true
You can’t perform that action at this time.
0 commit comments