diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 13b8cf4709..0381a99cbd 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -60,7 +60,12 @@ export class Batch { source.v = current; } - for (const e of this.combined_effects) { + for (const e of this.render_effects) { + set_signal_status(e, DIRTY); + schedule_effect(e); + } + + for (const e of this.effects) { set_signal_status(e, DIRTY); schedule_effect(e); } diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index addcfc29a0..044f1ab240 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -705,9 +705,15 @@ function flush_queued_root_effects() { } if (batch.async_effects.length === 0 && batch.settled()) { + var render_effects = batch.render_effects; + var effects = batch.effects; + + batch.render_effects = []; + batch.effects = []; + batch.commit(); - flush_queued_effects(batch.render_effects); - flush_queued_effects(batch.effects); + flush_queued_effects(render_effects); + flush_queued_effects(effects); } else { // store the effects on the batch so that they run next time, // even if they don't get re-dirtied