]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(reactivity): should not trigger length dependency on Array delete
authorEvan You <yyx990803@gmail.com>
Fri, 6 Mar 2020 16:30:56 +0000 (11:30 -0500)
committerEvan You <yyx990803@gmail.com>
Fri, 6 Mar 2020 16:31:10 +0000 (11:31 -0500)
close #774

packages/reactivity/__tests__/reactiveArray.spec.ts
packages/reactivity/src/effect.ts

index d91d447822653e84acb50aadcc3ef13c95172810..54218c1978018ae653199116e242b12f51c8d64a 100644 (file)
@@ -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(() => {
index 010aea0020a528f72be20e95d4cfe8d6607b56e0..2368caf66bdcf1ffc2a7b9685d8cdf99880a4ae2 100644 (file)
@@ -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