|
|
@@ -16,9 +16,7 @@ export class EffectScope {
|
|
|
* @internal
|
|
|
*/
|
|
|
cleanups: (() => void)[] = []
|
|
|
-
|
|
|
/**
|
|
|
- * only assigned by undetached scope
|
|
|
* @internal
|
|
|
*/
|
|
|
parent: EffectScope | undefined
|
|
|
@@ -38,9 +36,9 @@ export class EffectScope {
|
|
|
*/
|
|
|
private index: number | undefined
|
|
|
|
|
|
- constructor(detached = false) {
|
|
|
+ constructor(public detached = false) {
|
|
|
+ this.parent = activeEffectScope
|
|
|
if (!detached && activeEffectScope) {
|
|
|
- this.parent = activeEffectScope
|
|
|
this.index =
|
|
|
(activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
|
|
|
this
|
|
|
@@ -93,7 +91,7 @@ export class EffectScope {
|
|
|
}
|
|
|
}
|
|
|
// nested scope, dereference from parent to avoid memory leaks
|
|
|
- if (this.parent && !fromParent) {
|
|
|
+ if (!this.detached && this.parent && !fromParent) {
|
|
|
// optimized O(1) removal
|
|
|
const last = this.parent.scopes!.pop()
|
|
|
if (last && last !== this) {
|
|
|
@@ -101,6 +99,7 @@ export class EffectScope {
|
|
|
last.index = this.index!
|
|
|
}
|
|
|
}
|
|
|
+ this.parent = undefined
|
|
|
this.active = false
|
|
|
}
|
|
|
}
|