From 0e921b9b78e452da78f09f11edb964f5f21fd572 Mon Sep 17 00:00:00 2001 From: guaijie <30885718+guaijie@users.noreply.github.com> Date: Sat, 22 Feb 2020 00:07:08 +0800 Subject: [PATCH 1/3] Update effect.ts --- packages/reactivity/src/effect.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index c0f4707d83d..d4c327efc42 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -176,17 +176,19 @@ export function trigger( } const effects = new Set() const computedRunners = new Set() - if ( - type === TriggerOpTypes.CLEAR || - (key === 'length' && - isArray(target) && - (newValue as number) < (oldValue as number)) - ) { + if (type === TriggerOpTypes.CLEAR) { // collection being cleared or Array length mutation // trigger all effects for target - depsMap.forEach(dep => { + depsMap.forEach((dep, i) => { addRunners(effects, computedRunners, dep) }) + } else if (key === 'length' && isArray(target)) { + const startIndex: number = (newValue as number) || 0 + depsMap.forEach((dep, i) => { + if (i >= startIndex || i === 'length') { + addRunners(effects, computedRunners, dep) + } + }) } else { // schedule runs for SET | ADD | DELETE if (key !== void 0) { From 64dc675f6404d6c6882b4da9e22e977e8a32e30f Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 22 Feb 2020 05:08:59 +0100 Subject: [PATCH 2/3] Update effect.ts --- packages/reactivity/src/effect.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index d4c327efc42..8f81efd9b90 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -177,15 +177,14 @@ export function trigger( const effects = new Set() const computedRunners = new Set() if (type === TriggerOpTypes.CLEAR) { - // collection being cleared or Array length mutation + // collection being cleared // trigger all effects for target - depsMap.forEach((dep, i) => { + depsMap.forEach(dep => { addRunners(effects, computedRunners, dep) }) } else if (key === 'length' && isArray(target)) { - const startIndex: number = (newValue as number) || 0 - depsMap.forEach((dep, i) => { - if (i >= startIndex || i === 'length') { + depsMap.forEach((dep, key) => { + if (key === 'length' || key > (newValue as number)) { addRunners(effects, computedRunners, dep) } }) From 9f49b1b00d6c8f70af598bfa8f643a5dc44f7e24 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 22 Feb 2020 05:09:54 +0100 Subject: [PATCH 3/3] Update effect.ts --- packages/reactivity/src/effect.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 8f81efd9b90..010aea0020a 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -184,7 +184,7 @@ export function trigger( }) } else if (key === 'length' && isArray(target)) { depsMap.forEach((dep, key) => { - if (key === 'length' || key > (newValue as number)) { + if (key === 'length' || key >= (newValue as number)) { addRunners(effects, computedRunners, dep) } })