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)
|
||||
})
|
||||
|
||||
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())
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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,
|
||||
|
@ -277,7 +277,7 @@ export function trigger(
|
|||
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)
|
||||
}
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue