fix(reactivity): should trigger all effects when array length is mutated (#754)
This commit is contained in:
parent
c54aa43fa7
commit
5fac65589b
@ -737,6 +737,30 @@ describe('reactivity/effect', () => {
|
|||||||
expect(fnSpy).toHaveBeenCalledTimes(1)
|
expect(fnSpy).toHaveBeenCalledTimes(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should trigger all effects when array lenght is set 0', () => {
|
||||||
|
const observed: any = reactive([1])
|
||||||
|
let dummy, record
|
||||||
|
effect(() => {
|
||||||
|
dummy = observed.length
|
||||||
|
})
|
||||||
|
effect(() => {
|
||||||
|
record = observed[0]
|
||||||
|
})
|
||||||
|
expect(dummy).toBe(1)
|
||||||
|
expect(record).toBe(1)
|
||||||
|
|
||||||
|
observed[1] = 2
|
||||||
|
expect(observed[1]).toBe(2)
|
||||||
|
|
||||||
|
observed.unshift(3)
|
||||||
|
expect(dummy).toBe(3)
|
||||||
|
expect(record).toBe(3)
|
||||||
|
|
||||||
|
observed.length = 0
|
||||||
|
expect(dummy).toBe(0)
|
||||||
|
expect(record).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
it('should handle self dependency mutations', () => {
|
it('should handle self dependency mutations', () => {
|
||||||
const count = ref(0)
|
const count = ref(0)
|
||||||
effect(() => {
|
effect(() => {
|
||||||
|
@ -174,8 +174,9 @@ export function trigger(
|
|||||||
}
|
}
|
||||||
const effects = new Set<ReactiveEffect>()
|
const effects = new Set<ReactiveEffect>()
|
||||||
const computedRunners = new Set<ReactiveEffect>()
|
const computedRunners = new Set<ReactiveEffect>()
|
||||||
if (type === TriggerOpTypes.CLEAR) {
|
if (type === TriggerOpTypes.CLEAR || (key === 'length' && isArray(target))) {
|
||||||
// collection being cleared, trigger all effects for target
|
// collection being cleared or Array length mutation
|
||||||
|
// trigger all effects for target
|
||||||
depsMap.forEach(dep => {
|
depsMap.forEach(dep => {
|
||||||
addRunners(effects, computedRunners, dep)
|
addRunners(effects, computedRunners, dep)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user