diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 661c170170..affefcce20 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -856,7 +856,12 @@ export function schedule_effect(signal) { // updated an internal source, or because a branch is being unskipped, // bail out or we'll cause a second flush if (collected_effects !== null && effect === active_effect) { - return; + // in sync mode, render effects run during traversal. in an extreme edge case + // they can be made dirty after they have already been visited, in which + // case we shouldn't bail out + if (async_mode_flag || (signal.f & RENDER_EFFECT) === 0) { + return; + } } if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {