Skip to content

Commit 76c7f54

Browse files
authored
perf(effect): optimize effect trigger for array length mutation (#761)
1 parent e9024bf commit 76c7f54

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

packages/reactivity/src/effect.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,18 @@ export function trigger(
176176
}
177177
const effects = new Set<ReactiveEffect>()
178178
const computedRunners = new Set<ReactiveEffect>()
179-
if (
180-
type === TriggerOpTypes.CLEAR ||
181-
(key === 'length' &&
182-
isArray(target) &&
183-
(newValue as number) < (oldValue as number))
184-
) {
185-
// collection being cleared or Array length mutation
179+
if (type === TriggerOpTypes.CLEAR) {
180+
// collection being cleared
186181
// trigger all effects for target
187182
depsMap.forEach(dep => {
188183
addRunners(effects, computedRunners, dep)
189184
})
185+
} else if (key === 'length' && isArray(target)) {
186+
depsMap.forEach((dep, key) => {
187+
if (key === 'length' || key >= (newValue as number)) {
188+
addRunners(effects, computedRunners, dep)
189+
}
190+
})
190191
} else {
191192
// schedule runs for SET | ADD | DELETE
192193
if (key !== void 0) {

0 commit comments

Comments
 (0)