From 3963ff9ec94fe23aac1a204dffd96ed224d15851 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 21 Feb 2024 22:36:30 -0500 Subject: [PATCH] fix $effect.root --- packages/svelte/src/internal/client/constants.js | 1 + .../src/internal/client/reactivity/computations.js | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/internal/client/constants.js b/packages/svelte/src/internal/client/constants.js index 7f3d7f1dba..d53d438ce6 100644 --- a/packages/svelte/src/internal/client/constants.js +++ b/packages/svelte/src/internal/client/constants.js @@ -10,6 +10,7 @@ export const DIRTY = 1 << 9; export const MAYBE_DIRTY = 1 << 10; export const INERT = 1 << 11; export const DESTROYED = 1 << 12; +export const ROOT_EFFECT = 1 << 13; export const ROOT_BLOCK = 0; export const IF_BLOCK = 1; diff --git a/packages/svelte/src/internal/client/reactivity/computations.js b/packages/svelte/src/internal/client/reactivity/computations.js index 094efb747f..926159c067 100644 --- a/packages/svelte/src/internal/client/reactivity/computations.js +++ b/packages/svelte/src/internal/client/reactivity/computations.js @@ -20,7 +20,8 @@ import { UNOWNED, CLEAN, UNINITIALIZED, - INERT + INERT, + ROOT_EFFECT } from '../constants.js'; import { noop } from '../../common.js'; @@ -83,7 +84,9 @@ function internal_create_effect(type, fn, sync, block, schedule) { signal.x = current_component_context; if (current_effect !== null) { signal.l = current_effect.l + 1; - push_reference(current_effect, signal); + if ((signal.f & ROOT_EFFECT) === 0) { + push_reference(current_effect, signal); + } } if (schedule) { schedule_effect(signal, sync); @@ -140,7 +143,7 @@ export function user_effect(fn) { * @returns {() => void} */ export function user_root_effect(fn) { - const effect = render_effect(fn, current_block, true); + const effect = internal_create_effect(RENDER_EFFECT | ROOT_EFFECT, fn, true, current_block, true); return () => { destroy_signal(effect); };