Skip to content

Commit 6cbe596

Browse files
committed
fix: child effects are removed from parent branches
1 parent 8e90dd2 commit 6cbe596

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

.changeset/silly-lies-film.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: child effects are removed from parent branches

packages/svelte/src/internal/client/reactivity/deriveds.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,22 @@ export function derived_safe_equal(fn) {
7070
* @returns {void}
7171
*/
7272
function destroy_derived_children(signal) {
73+
var effects = signal.effects;
74+
7375
// TODO: should it be possible to create effects in deriveds given they're meant to be pure?
74-
if (signal.effects) {
75-
for (var i = 0; i < signal.effects.length; i += 1) {
76-
destroy_effect(signal.effects[i]);
77-
}
76+
if (effects !== null) {
7877
signal.effects = null;
78+
for (var i = 0; i < effects.length; i += 1) {
79+
destroy_effect(effects[i]);
80+
}
7981
}
82+
var deriveds = signal.deriveds;
8083

81-
if (signal.deriveds) {
82-
for (i = 0; i < signal.deriveds.length; i += 1) {
83-
destroy_derived(signal.deriveds[i]);
84-
}
84+
if (deriveds !== null) {
8585
signal.deriveds = null;
86+
for (i = 0; i < deriveds.length; i += 1) {
87+
destroy_derived(deriveds[i]);
88+
}
8689
}
8790
}
8891

packages/svelte/src/internal/client/runtime.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,11 +353,13 @@ export function remove_reactions(signal, start_index) {
353353
* @returns {void}
354354
*/
355355
export function destroy_children(signal) {
356-
if (signal.effects) {
357-
for (var i = 0; i < signal.effects.length; i += 1) {
358-
destroy_effect(signal.effects[i]);
359-
}
356+
var effects = signal.effects;
357+
358+
if (effects !== null) {
360359
signal.effects = null;
360+
for (var i = 0; i < effects.length; i += 1) {
361+
destroy_effect(effects[i]);
362+
}
361363
}
362364
}
363365

0 commit comments

Comments
 (0)