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)
|
||||
})
|
||||
|
||||
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', () => {
|
||||
const count = ref(0)
|
||||
effect(() => {
|
||||
|
@ -174,8 +174,9 @@ export function trigger(
|
||||
}
|
||||
const effects = new Set<ReactiveEffect>()
|
||||
const computedRunners = new Set<ReactiveEffect>()
|
||||
if (type === TriggerOpTypes.CLEAR) {
|
||||
// collection being cleared, trigger all effects for target
|
||||
if (type === TriggerOpTypes.CLEAR || (key === 'length' && isArray(target))) {
|
||||
// collection being cleared or Array length mutation
|
||||
// trigger all effects for target
|
||||
depsMap.forEach(dep => {
|
||||
addRunners(effects, computedRunners, dep)
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user