File tree 2 files changed +24
-7
lines changed
2 files changed +24
-7
lines changed Original file line number Diff line number Diff line change @@ -266,12 +266,29 @@ describe('reactivity/ref', () => {
266
266
expect ( dummyY ) . toBe ( 5 )
267
267
} )
268
268
269
- test ( 'toRefs pass a reactivity object' , ( ) => {
270
- console . warn = jest . fn ( )
271
- const obj = { x : 1 }
272
- toRefs ( obj )
273
- expect ( console . warn ) . toBeCalled ( )
269
+ test ( 'toRefs should warn on plain object' , ( ) => {
270
+ toRefs ( { } )
271
+ expect ( `toRefs() expects a reactive object` ) . toHaveBeenWarned ( )
274
272
} )
273
+
274
+ test ( 'toRefs should warn on plain array' , ( ) => {
275
+ toRefs ( [ ] )
276
+ expect ( `toRefs() expects a reactive object` ) . toHaveBeenWarned ( )
277
+ } )
278
+
279
+ test ( 'toRefs reactive array' , ( ) => {
280
+ const arr = reactive ( [ 'a' , 'b' , 'c' ] )
281
+ const refs = toRefs ( arr )
282
+
283
+ expect ( Array . isArray ( refs ) ) . toBe ( true )
284
+
285
+ refs [ 0 ] . value = '1'
286
+ expect ( arr [ 0 ] ) . toBe ( '1' )
287
+
288
+ arr [ 1 ] = '2'
289
+ expect ( refs [ 1 ] . value ) . toBe ( '2' )
290
+ } )
291
+
275
292
test ( 'customRef' , ( ) => {
276
293
let value = 1
277
294
let _trigger : ( ) => void
Original file line number Diff line number Diff line change 1
1
import { track , trigger } from './effect'
2
2
import { TrackOpTypes , TriggerOpTypes } from './operations'
3
- import { isObject , hasChanged } from '@vue/shared'
3
+ import { isArray , isObject , hasChanged } from '@vue/shared'
4
4
import { reactive , isProxy , toRaw , isReactive } from './reactive'
5
5
import { CollectionTypes } from './collectionHandlers'
6
6
@@ -121,7 +121,7 @@ export function toRefs<T extends object>(object: T): ToRefs<T> {
121
121
if ( __DEV__ && ! isProxy ( object ) ) {
122
122
console . warn ( `toRefs() expects a reactive object but received a plain one.` )
123
123
}
124
- const ret : any = { }
124
+ const ret : any = isArray ( object ) ? new Array ( object . length ) : { }
125
125
for ( const key in object ) {
126
126
ret [ key ] = toRef ( object , key )
127
127
}
You can’t perform that action at this time.
0 commit comments