Skip to content

Commit 23b44ce

Browse files
committed
fix #16477
1 parent 4cb4847 commit 23b44ce

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

packages/svelte/src/internal/client/reactivity/batch.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ function flush_queued_effects(effects) {
563563
var effect = effects[i++];
564564

565565
if ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {
566-
var wv = write_version;
566+
var n = current_batch ? current_batch.current.size : 0;
567567

568568
update_effect(effect);
569569

@@ -586,7 +586,11 @@ function flush_queued_effects(effects) {
586586

587587
// if state is written in a user effect, abort and re-schedule, lest we run
588588
// effects that should be removed as a result of the state change
589-
if (write_version > wv && (effect.f & USER_EFFECT) !== 0) {
589+
if (
590+
current_batch !== null &&
591+
current_batch.current.size > n &&
592+
(effect.f & USER_EFFECT) !== 0
593+
) {
590594
break;
591595
}
592596
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
const der = $derived(false);
3+
4+
$effect(() => {
5+
der
6+
});
7+
</script>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
async test() {}
5+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
import Component from './Component.svelte'
3+
const arr = Array.from({length: 10001});
4+
</script>
5+
6+
{#each arr}
7+
<Component />
8+
{/each}

0 commit comments

Comments
 (0)