expect(fnSpy2).toHaveBeenCalledTimes(1)
})
+ it('should be triggered when set length with string', () => {
+ let ret1 = 'idle'
+ let ret2 = 'idle'
+ const arr1 = reactive(new Array(11).fill(0))
+ const arr2 = reactive(new Array(11).fill(0))
+ effect(() => {
+ ret1 = arr1[10] === undefined ? 'arr[10] is set to empty' : 'idle'
+ })
+ effect(() => {
+ ret2 = arr2[10] === undefined ? 'arr[10] is set to empty' : 'idle'
+ })
+ arr1.length = 2
+ arr2.length = '2' as any
+ expect(ret1).toBe(ret2)
+ })
+
describe('readonly + reactive for Map', () => {
test('should work with readonly(reactive(Map))', () => {
const m = reactive(new Map())
import { TrackOpTypes, TriggerOpTypes } from './operations'
-import { extend, isArray, isIntegerKey, isMap } from '@vue/shared'
+import { extend, isArray, isIntegerKey, isMap, toNumber } from '@vue/shared'
import { EffectScope, recordEffectScope } from './effectScope'
import {
createDep,
deps = [...depsMap.values()]
} else if (key === 'length' && isArray(target)) {
depsMap.forEach((dep, key) => {
- if (key === 'length' || key >= (newValue as number)) {
+ if (key === 'length' || key >= toNumber(newValue)) {
deps.push(dep)
}
})