diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index ca59cd3f9a..58c5d0ebfa 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -369,8 +369,10 @@ export class Batch { previous_batch = this; + // console.group('flush effects'); flush_queued_effects(render_effects); flush_queued_effects(effects); + // console.groupEnd(); previous_batch = null; this.#deferred?.resolve(); @@ -1164,6 +1166,8 @@ export function schedule_effect(effect) { /** @type {Source[]} */ let eager_versions = []; +let running_eager_effect = false; + function eager_flush() { try { flushSync(() => { @@ -1200,14 +1204,17 @@ export function eager(fn) { var previous_batch_values = batch_values; var previous_batch_cvs = batch_cvs; var previous_batch_wvs = batch_wvs; + var previous_running_eager_effect = running_eager_effect; try { + running_eager_effect = true; batch_values = batch_cvs = batch_wvs = null; value = fn(); } finally { batch_values = previous_batch_values; batch_cvs = previous_batch_cvs; batch_wvs = previous_batch_wvs; + running_eager_effect = previous_running_eager_effect; } return; @@ -1388,7 +1395,7 @@ export function set_cv(reaction, cv = write_version) { current_batch?.cvs.set(reaction, cv); batch_cvs?.set(reaction, cv); - if (!current_batch?.is_fork) { + if (!current_batch?.is_fork && !running_eager_effect) { reaction.cv = cv; } } diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 41af83456f..7504615b4c 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -269,9 +269,7 @@ export function flush_eager_effects() { eager_effects_deferred = false; for (const effect of eager_effects) { - if (is_dirty(effect)) { - update_effect(effect); - } + update_effect(effect); } eager_effects.clear();