diff --git a/packages/reactivity/__tests__/reactiveArray.spec.ts b/packages/reactivity/__tests__/reactiveArray.spec.ts index d91d4478226..54218c19780 100644 --- a/packages/reactivity/__tests__/reactiveArray.spec.ts +++ b/packages/reactivity/__tests__/reactiveArray.spec.ts @@ -88,6 +88,17 @@ describe('reactivity/reactive/Array', () => { expect(index).toBe(1) }) + test('delete on Array should not trigger length dependency', () => { + const arr = reactive([1, 2, 3]) + const fn = jest.fn() + effect(() => { + fn(arr.length) + }) + expect(fn).toHaveBeenCalledTimes(1) + delete arr[1] + expect(fn).toHaveBeenCalledTimes(1) + }) + describe('Array methods w/ refs', () => { let original: any[] beforeEach(() => { diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 010aea0020a..2368caf66bd 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -196,7 +196,7 @@ export function trigger( // also run for iteration key on ADD | DELETE | Map.SET if ( type === TriggerOpTypes.ADD || - type === TriggerOpTypes.DELETE || + (type === TriggerOpTypes.DELETE && !isArray(target)) || (type === TriggerOpTypes.SET && target instanceof Map) ) { const iterationKey = isArray(target) ? 'length' : ITERATE_KEY