File tree Expand file tree Collapse file tree 2 files changed +15
-5
lines changed
test/unit/features/v3/reactivity Expand file tree Collapse file tree 2 files changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -16,9 +16,7 @@ export class EffectScope {
1616 * @internal
1717 */
1818 cleanups : ( ( ) => void ) [ ] = [ ]
19-
2019 /**
21- * only assigned by undetached scope
2220 * @internal
2321 */
2422 parent : EffectScope | undefined
@@ -38,9 +36,9 @@ export class EffectScope {
3836 */
3937 private index : number | undefined
4038
41- constructor ( detached = false ) {
39+ constructor ( public detached = false ) {
40+ this . parent = activeEffectScope
4241 if ( ! detached && activeEffectScope ) {
43- this . parent = activeEffectScope
4442 this . index =
4543 ( activeEffectScope . scopes || ( activeEffectScope . scopes = [ ] ) ) . push (
4644 this
@@ -93,14 +91,15 @@ export class EffectScope {
9391 }
9492 }
9593 // nested scope, dereference from parent to avoid memory leaks
96- if ( this . parent && ! fromParent ) {
94+ if ( ! this . detached && this . parent && ! fromParent ) {
9795 // optimized O(1) removal
9896 const last = this . parent . scopes ! . pop ( )
9997 if ( last && last !== this ) {
10098 this . parent . scopes ! [ this . index ! ] = last
10199 last . index = this . index !
102100 }
103101 }
102+ this . parent = undefined
104103 this . active = false
105104 }
106105 }
Original file line number Diff line number Diff line change @@ -279,4 +279,15 @@ describe('reactivity/effectScope', () => {
279279 expect ( getCurrentScope ( ) ) . toBe ( currentScope )
280280 } )
281281 } )
282+
283+ it ( 'calling .off() of a detached scope inside an active scope should not break currentScope' , ( ) => {
284+ const parentScope = new EffectScope ( )
285+
286+ parentScope . run ( ( ) => {
287+ const childScope = new EffectScope ( true )
288+ childScope . on ( )
289+ childScope . off ( )
290+ expect ( getCurrentScope ( ) ) . toBe ( parentScope )
291+ } )
292+ } )
282293} )
You can’t perform that action at this time.
0 commit comments