diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js index 6d2d1326ae..6ad7139be2 100644 --- a/packages/svelte/src/internal/client/reactivity/deriveds.js +++ b/packages/svelte/src/internal/client/reactivity/deriveds.js @@ -23,7 +23,8 @@ import { push_reaction_value, is_destroying_effect, update_effect, - remove_reactions + remove_reactions, + write_version } from '../runtime.js'; import { equals, safe_equals } from './equality.js'; import * as e from '../errors.js'; @@ -384,11 +385,13 @@ export function execute_derived(derived) { * @returns {void} */ export function update_derived(derived) { + derived.rv = write_version; + var old_value = derived.v; var value = execute_derived(derived); if (!derived.equals(value)) { - derived.wv = increment_write_version(); + derived.wv = write_version; // in a fork, we don't update the underlying value, just `batch_values`. // the underlying value will be updated when the fork is committed. diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 279c0cf465..8f73c99268 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -238,7 +238,7 @@ export function internal_set(source, value, updated_during_traversal = null) { } } - source.wv = increment_write_version(); + source.wv = source.rv = increment_write_version(); // For debugging, in case you want to know which reactions are being scheduled: // log_reactions(source); diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 49adb5d0ee..56eec8b4f3 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -259,8 +259,6 @@ export function update_reaction(reaction) { } try { - reaction.wv = reaction.rv = write_version; - reaction.f |= REACTION_IS_UPDATING; var fn = /** @type {Function} */ (reaction.fn); var result = fn(); @@ -464,10 +462,13 @@ export function update_effect(effect) { destroy_effect_children(effect); } + effect.rv = write_version; + execute_effect_teardown(effect); var teardown = update_reaction(effect); effect.teardown = typeof teardown === 'function' ? teardown : null; - effect.wv = write_version; + + effect.wv = write_version; // TODO should this be assigned before the update? // In DEV, increment versions of any sources that were written to during the effect, // so that they are correctly marked as dirty when the effect re-runs