mirror of https://github.com/vuejs/core.git
fix(reactivity): enable trigger when use str to set length of arr (#6810)
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
This commit is contained in:
parent
e5fc7dcc02
commit
e6224f4256
|
@ -922,6 +922,22 @@ describe('reactivity/effect', () => {
|
||||||
expect(fnSpy2).toHaveBeenCalledTimes(1)
|
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', () => {
|
describe('readonly + reactive for Map', () => {
|
||||||
test('should work with readonly(reactive(Map))', () => {
|
test('should work with readonly(reactive(Map))', () => {
|
||||||
const m = reactive(new Map())
|
const m = reactive(new Map())
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { TrackOpTypes, TriggerOpTypes } from './operations'
|
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 { EffectScope, recordEffectScope } from './effectScope'
|
||||||
import {
|
import {
|
||||||
createDep,
|
createDep,
|
||||||
|
@ -277,7 +277,7 @@ export function trigger(
|
||||||
deps = [...depsMap.values()]
|
deps = [...depsMap.values()]
|
||||||
} else if (key === 'length' && isArray(target)) {
|
} else if (key === 'length' && isArray(target)) {
|
||||||
depsMap.forEach((dep, key) => {
|
depsMap.forEach((dep, key) => {
|
||||||
if (key === 'length' || key >= (newValue as number)) {
|
if (key === 'length' || key >= toNumber(newValue)) {
|
||||||
deps.push(dep)
|
deps.push(dep)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue