diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 1575d6561d..aae1aca16f 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -266,14 +266,19 @@ export class Batch { var is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; var is_skippable_branch = is_branch && (flags & CLEAN) !== 0; - var skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect); + var skip = is_skippable_branch || this.#skipped_branches.has(effect); if (!skip && effect.fn !== null) { if (is_branch) { - effect.f ^= CLEAN; + if ((flags & INERT) === 0) { + effect.f ^= CLEAN; + } } else if ((flags & EFFECT) !== 0) { effects.push(effect); - } else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) { + } else if ( + (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && + (async_mode_flag || (flags & INERT) !== 0) + ) { render_effects.push(effect); } else if (is_dirty(effect)) { if ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect); diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index b670e7ab55..03d17d46cb 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -665,15 +665,6 @@ function resume_children(effect, local) { if ((effect.f & INERT) === 0) return; effect.f ^= INERT; - // If a dependency of this effect changed while it was paused, - // schedule the effect to update. we don't use `is_dirty` - // here because we don't want to eagerly recompute a derived like - // `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined - if ((effect.f & CLEAN) === 0) { - set_signal_status(effect, DIRTY); - schedule_effect(effect); - } - var child = effect.first; while (child !== null) {